【问题标题】:Unsure what get(Calendar.DAY_OF_WEEK) returns不确定 get(Calendar.DAY_OF_WEEK) 返回什么
【发布时间】:2012-06-11 11:14:43
【问题描述】:

我的问题可以很容易地由以下场景造成:

 //create a gregorian calendar object that set the date and time as 4th June 2012 at 10:30PM
 Calendar calendar = new GregorianCalendar(2012, 6, 4, 22, 30);

 //when I print out these:
 System.out.println(calendar.get(Calendar.DAY_OF_WEEK));
 System.out.println(calendar.get(Calendar.MINUTE));
 System.out.println(calendar.get(Calendar.HOUR));
 System.out.println(calendar.get(Calendar.DATE));
 System.out.println(calendar.get(Calendar.MONTH));
 System.out.println(calendar.get(Calendar.YEAR));

 //output reads as:
 4
 30
 10
 4
 6
 2012

 //so does calendar.get(Calendar.DAY_OF_WEEK) == calendar.get(Calendar.DATE) ???

为了让大家清楚 2012 年 6 月 4 日是星期一,那么 calendar.get(Calendar.DAY_OF_WEEK) 不应该在一周的第一天返回 0 吗?

感谢您的所有帮助和关注,同时请验证您所指的来源。

user1442080

【问题讨论】:

    标签: date calendar get dayofweek gregorian-calendar


    【解决方案1】:

    java Calendar 类中的月份是从 0 开始的。所以六月是第 5 个月。

    您实际上创建了一个表示 7 月 4 日的对象,恰好是星期三,也就是该周的第四天。

    【讨论】:

    • 谢谢!我还注意到日期也从 0 开始。所以我实际上创建了一个代表 7 月 5 日的对象。
    • 我的荣幸。您还可以查看更直观的时间库:joda-time.sourceforge.net。 (哦,你能接受我的回答吗;-))
    【解决方案2】:

    应始终查找 Calendar.{field} 返回的值,例如比如 Calendar.SUNDAY、Calendar.MONDAY、Calendar.JANUARY、Calendar.MARCH 等等。 这是因为,Calendar.{field} 返回的值取决于创建 Calendar 实例时指定的 TimeZone。 您可以通过创建两个具有不同时区的日历实例来尝试此操作:

    Calendar.getInstance("BST")
    

    Calendar.getInstance() // default timezone
    

    现在尝试获取calendar.get(Calendar.DAY_OF_WEEK),它将为这两个实例返回不同的整数值。

    【讨论】:

    • calendar.get(Calendar.DAY_OF_WEEK) 如何返回不同的整数值?星期几的值是常量,您仍然需要将 DAY_OF_WEEK 的返回值与 Calendar.FRIDAY 进行比较(例如)。一周的第一天的值可能会根据时区而变化,但 DAY_OF_WEEK 返回的值将始终需要与 java 日历常量对齐。
    猜你喜欢
    • 2020-12-05
    • 2013-02-05
    • 1970-01-01
    • 2020-11-11
    • 1970-01-01
    • 2012-05-30
    • 1970-01-01
    相关资源
    最近更新 更多