java - java 一年中最糟糕的一周

标签 java gregorian-calendar

我对一年中的正确星期有疑问。我有 JTextField,我在其中以 DD.MM.YYYY 格式输入日期。

private void buttonAddCulturalActionActionPerformed(java.awt.event.ActionEvent evt) {                                               
    String date = textfieldDateOfEvent.getText();
    if (!isCorrectFormatDate(date)) {
        textareaExtract.append("Wrong date format!\n");
        return;
    }
    int day = Integer.parseInt(date.substring(0, 2));
    int month = Integer.parseInt(date.substring(3, 5));
    int year = Integer.parseInt(date.substring(6, 10));
    GregorianCalendar enteredDate = new GregorianCalendar(year, month, day);
    String actionName = textfieldActionName.getText();
    String placeActionName = textfieldPlaceActionName.getText();
    int startHourAction = Integer.parseInt(textfieldStartHourAction.getText());

    if (isAllEntered(actionName, enteredDate, placeActionName, startHourAction)) {
        CulturalAction newAction = new CulturalAction(actionName, enteredDate,
                placeActionName, startHourAction);
        // culturalActions is priority queue
        culturalActions.add(newAction);
        extractAction(newAction);
    } else {
        textareaExtract.append("You need entered all parameters!\n");
    }
}

在这里我设置了文化行为(在构造函数中):

public CulturalAction(String nameAction, GregorianCalendar dateAction, String placeAction, int startHourAction) {
    this.nameAction = nameAction;
    this.placeAction = placeAction;
    this.startHourAction = startHourAction;
    // I have private attribute numberOfWeek in class CulturalAction
    cisloTydne = dateAction.get(GregorianCalendar.WEEK_OF_YEAR);
}

当我输入日期 10.10.2013 时,它会返回周数 45,但 40 是正确的。我来自捷克共和国。

感谢您的建议!

最佳答案

这就是问题:

GregorianCalendar enteredDate = new GregorianCalendar(year, month, day);

这将调用 new GregorianCalendar(2013, 10, 10) - 这意味着 11 月,而不是 10 月。

来自GregorianCalendar constructor docs :

month - the value used to set the MONTH calendar field in the calendar. Month value is 0-based. e.g., 0 for January.

另外两条建议:

  • 如果您必须仅使用 Java 库,请使用 SimpleDateFormat 执行解析,而不是自己执行
  • 如果可以的话,请使用 Joda Time相反,这是一个更明智的 API

关于java - java 一年中最糟糕的一周,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16225685/

相关文章:

java - publicId 和 systemId 之间需要空格

java - 无法删除重复的列标题和页脚

c# - C# 一年的最后一个星期日

c# - 如何将公历日期转换为波斯日期?

java - Web应用MongoDB数据库结构

java - 如何从汉明球中的一个字节计算所有最近的邻居

java - 内部/嵌套类构造函数的正确 "@link"或 "@see"javadoc 标记是什么?

c# - 是否可以在 .NET 中将非公历日期表示为 DateTime?

java - 获取正确的星期几和月份