java - 为什么我的 GregorianCalendar 对象返回错误的星期几?

标签 java date calendar gregorian-calendar

我的问题看似非常简单。我从 GregorianCalendar 对象制作日历图形用户界面,并使用它的方法计算不同月份的正确天数,以及不同日期对应的工作日。

但是工作日都是一贯的休息日。日历声称 2013 年 7 月 1 日是“2”,在我所在的地区,这意味着星期二。星期一应该是“1”。 “简单的!”我想,并输入:c.setFirstDayOfWeek(Calendar.MONDAY);但是没有任何反应。

所以我在 stackoverflow 上搜索答案,但遇到我问题的每个人似乎都忘记了 January 是 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));

输出是:

2013 年 1 月 7 日

2

我拒绝在我的代码中放入“-1”,以错误地纠正明显错误的症状。感谢帮助。

最佳答案

是的,Java 中的日期处理是有问题的...

  • 月份从 0 开始(一月)
  • 星期几从 SUNDAY 开始为 1,SATURDAY 为七 ( Ideone fiddle )
  • c.setFirstDayOfWeek(Calendar.MONDAY);与名字所暗示的有点不同

    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

您可以通过始终使用 Calendar 类中定义的常量来摆脱麻烦,甚至不尝试从这些常量的数字表示中推断出任何含义,或者 Calendar.get(int) 方法返回的结果...

关于java - 为什么我的 GregorianCalendar 对象返回错误的星期几?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19136226/

相关文章:

ios - 我可以从日历启动 iOS 应用程序吗?

java - Calendar.getInstance().getTime() 在 "GMT"中返回日期而不是默认时区

java - struts2 中的paramsPrepareParamsStack 拦截器?

java - 从 html 页面中提取元素的最佳方法?

扩展抽象类的Java过程

java - 使用预期模式检查日期及其模式

java.lang.ClassCastException : com. tibco.tibjms.TibjmsxSessionImp 无法转换为 javax.jms.QueueSession

php - 在php中计算从过去到现在的持续时间

php - 在 PHP/MYSQL 中基于 DATE 的 SELECT 的最佳方式

java - 从 ListView 中将 DateFormat 转换为小时和分钟