【问题标题】:Get the week of year, with sunday as the first day of the week using java calendar使用java日历获取一年中的一周,星期天作为一周的第一天
【发布时间】:2016-01-25 21:44:48
【问题描述】:

我正在尝试为我们的财务部门生成一些代码,他们需要一个字段来为他们提供一年中的当前周,但基于星期天是一周的第一天。因此,例如 01-25-16 (MM-dd-yyyy) 将是第 4 周。但是当我使用 java.util.Calendarcalendar.setFirstDayOfWeek 尝试到周日时,它告诉我这是第 5 周,因为它似乎在计数从 12 月底到 1 月 3 日作为第 1 周。

这是我目前写的代码:

private static int getWeekOfYearBySunday(DateTime dt){
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(dt.getMillis());
    calendar.setFirstDayOfWeek(Calendar.SUNDAY);

    return calendar.get(Calendar.WEEK_OF_YEAR);
}

这将返回第 5 周的第 5 周,即使如果以星期日为一周的开始,它应该为 4。

【问题讨论】:

    标签: java calendar


    【解决方案1】:

    你要改minimalDaysInFirstWeek,见Calendar#setMinimalDaysInFirstWeek(int)

    设置一年中第一周所需的最少天数;例如,如果第一周定义为包含一年中第一个月的第一天,则使用值 1 调用此方法。如果必须是整周,则使用值 7。

    另见GregorianCalendar

    例如,1998 年 1 月 1 日是星期四。如果 getFirstDayOfWeek()MONDAY 并且 getMinimalDaysInFirstWeek() 是 4(ISO 8601 标准兼容设置),则 1998 年的第 1 周从 1997 年 12 月 29 日开始,到 1998 年 1 月 4 日结束。最后一周是 1998 年1997 日历年的三天。但是,如果 getFirstDayOfWeek()SUNDAY,则 1998 年的第 1 周从 1998 年 1 月 4 日开始,到 1998 年 1 月 10 日结束; 1998 年的前三天是 1997 年第 53 周的一部分,他们的周年是 1997 年。

    但如果您为您的财务部门编写代码,您应该使用正确的Locale 创建日历,而不是更改某些属性,请参阅Calendar#getInstance(Locale)

    获取使用默认时区和指定区域设置的日历。返回的Calendar 基于具有给定语言环境的默认时区的当前时间。

    【讨论】:

      【解决方案2】:

      一年中星期的定义取决于语言环境。有关更多信息,请参阅此相关问题。 Why dec 31 2010 returns 1 as week of year?.

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-11-29
        • 1970-01-01
        • 1970-01-01
        • 2013-06-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多