当前位置: 首页 > 知识库问答 >
问题:

使用java日历获取一年中的一周,其中周日为一周的第一天

茅炯
2023-03-14

我正在尝试为我们的财务部门生成一些代码,他们需要一个字段,该字段将为他们提供一年中的当前一周,但以星期天为基础,这是一周的第一天。例如01-25-16(MM dd yyyy)将是第4周。然而,当我尝试使用java时。util。日历日历。将FirstDayOfWeek设置为Sunday,它告诉我这是第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,即使它应该是4,如果基于本周的开始在周日。


共有2个答案

苗征
2023-03-14

年的周的定义取决于区域设置。有关详细信息,请参阅此相关问题。为什么2010年12月31日返回1作为年的周?。

司空实
2023-03-14

您必须更改minimadaysinfirstweek,请参阅日历#设置minimadaysinfirstweek(int):

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

另请参阅GregorianCalendar

例如,1998年1月1日是星期四。如果getFirstDayOfWeek()MONdaygetMinialDaysInFirstWeek()是4(ISO 8601标准兼容设置),那么1998年的第1周从1997年12月29日开始,到1998年1月4日结束。1997年自然年的最后三天是1998年。但是,如果getFirstDayOfWeek()SUNday,那么1998年的第1周从1998年1月4日开始,到1998年1月10日结束;1998年的前三天是1997年第53周的一部分,它们的周年是1997年。

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

获取使用默认时区和指定区域设置的日历。返回日历基于给定区域设置的默认时区中的当前时间。

 类似资料:
  • 我想在将一周的第一天设置为周日后,将2018年10月9日这一周作为一年中的42周。我仍然从下面的代码片段中得到41的输出 我错过了什么吗? 背景:我们一周的开始可能是可变的。我们的配置能够让用户决定一周的第一天。

  • 问题内容: 我想找到星期一,星期二,星期三等的日期戳。如果这个星期还未到这一天,我希望该日期为本周,否则为下周。谢谢! 问题答案: 看到 通过查看星期数,您可能会发现自己是否已经过了这一天:

  • 我在本教程的帮助下制作了日历:http://droidwalk.blogspot.it/2012/11/android-calendar-sample.html ..但是这个日历从星期天开始,我想从星期一开始。。我试图改变价值观​​在函数中设置对象GregorianCalendar,但它不会给出所需的结果。本周从周一开始,但在某些月份,我们失去了第一周。我发现了一个类似的问题:从周一开始制作日历,

  • 我需要在我的dim_date中添加新的业务wee,实际上我有一个月中的星期,如下表所示,每7天计算一次。 但是对于这个商业周专栏,一周应该从星期一开始,到星期日结束,即使第一周只有一天(当一个月从星期日开始时),但如果月份从星期五开始,我应该将其视为该月的第一周。 你有什么建议来计算这个吗?谢谢

  • 问题内容: 假设我有2011年1月3日,我想在一周的第一天,也就是星期天,那是2011年1月2日,我该怎么做? 原因是我有此查询: 是的,我意识到起源拼写错误,但是在此之前我就在这里,因此由于太多内部应用程序引用了它,因此我无法对其进行更正。 因此,我按周分组,但我希望以此填充我的图表,所以我不能让所有的周初看起来都像不同的日期。我该如何解决? 问题答案: 如果您需要处理从星期一开始的几周,也可以

  • 我的布局中有一个,我已经在其中添加了日期更改侦听器: 我可以访问所选日期的年、月、日。但是我怎么知道一周中的哪一天呢?我想要在