【发布时间】:2013-10-08 19:06:00
【问题描述】:
我的问题看起来非常简单。我从一个 GregorianCalendar 对象制作了一个日历图形用户界面,并使用它的方法来计算不同月份的正确天数,以及不同日期对应的工作日。
但是平日是一贯的休息一天。日历声称 2013 年 7 月 1 日是“2”,在我所在的地区,这意味着星期二。星期一应该是“1”。 “简单!”我想,然后输入: c.setFirstDayOfWeek(Calendar.MONDAY);但是没有反应。
所以我在 stackoverflow 上搜索答案,但遇到我问题的每个人似乎都忘记了一月是 0,而不是 1。我没有。所以现在我被卡住了。
作为一个简化的代码,我做了一个非常短的代码片段,并带有相应的输出:
GregorianCalendar c = new GregorianCalendar();
c.setFirstDayOfWeek(Calendar.MONDAY);
c.set(Calendar.MONTH, 6);
c.set(Calendar.DAY_OF_MONTH, 1);
c.set(Calendar.YEAR, 2013);
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-YYYY");
System.out.println(sdf.format(c.getTime()));
System.out.println(c.get(Calendar.DAY_OF_WEEK));
输出是:
01-07-2013
2
我拒绝在我的代码中输入“-1”,以错误地纠正明显错误的症状。帮助表示赞赏。
【问题讨论】:
-
2 是星期一... 1 是星期日... 另外,setFirstDayOfWeek,根据文档:
The first week of a month or year is defined as the earliest seven day period beginning on getFirstDayOfWeek() and containing at least getMinimalDaysInFirstWeek() days of that month or year。那里没有obvious mistake。只是本地化问题... -
谢谢。到目前为止,我已经不再尝试将星期一设置为一周的第一天。编辑我的其他代码以期望星期天是第 1 号似乎更简单,无论它在我看来多么不合逻辑。感谢您告诉我我的错误是我对 setFirstDayOfWeek() 方法的解释。这可能是我自己很难找到的。我希望我能接受它作为答案,但它似乎只是作为评论发布。
-
对于这个问题的任何新读者,我建议您不要使用
GregorianCalendar、Calendar和SimpleDateFormat。这些类设计不良且早已过时(最后一个尤其是出了名的麻烦)。而是使用LocalDate、WeekFields和DateTimeFormatter,均来自java.time, the modern Java date and time API。 -
我拒绝输入“-1”。同样减去 1 对 1 = 星期日也无济于事,因为你会在你想要 7 的地方得到 0。
标签: java date calendar gregorian-calendar