Nas*_*sir 4 java calendar week-number mongodb
Mongodb 的$week 运算符表示
\n\nTakes a date and returns the week of the year as a number between 0 and 53.\n\nWeeks begin on Sundays, and week 1 begins with the first Sunday of the year. Days \npreceding the first Sunday of the year are in week 0. This behavior is the same as the\n \xe2\x80\x9c%U\xe2\x80\x9d operator to the strftime standard library function.\nRun Code Online (Sandbox Code Playgroud)\n\n而 Java 日历的 DAY_OF_WEEK 返回略有不同(美国区域设置)。例如,对于 2013 年,mongo 的第 1 周实际上是第 2 周。
\n\n我的问题是,添加任意1并不能解决问题。是否有一个公式可以用来确定使用哪个周数来获取周开始日期。
\n\n场景:我正在 mongo 中运行聚合,它返回一周数。根据周数,我需要到达周开始日期。
\n\n像下面这样的东西总是有效吗?假设日历是日历的另一个实例。
\n\n Calendar firstDay = Calendar.getInstance(Locale.US);\n firstDay.set(Calendar.DAY_OF_YEAR, 1);\n int day = firstDay.get(Calendar.DAY_OF_WEEK);\n if (day != Calendar.SUNDAY){\n //both mongo and java calendar start in different weeks so add 1 to reconcile\n calendar.set(Calendar.WEEK_OF_YEAR, number.intValue()+1);\n }\nRun Code Online (Sandbox Code Playgroud)\n
我根本不会将 Java 的一周纳入考虑范围 - 除非你能以某种方式说服 MongoDB 不要再这么崩溃了。(这是一年中一周的一个非常奇怪的定义;我通常使用 ISO-8601 定义。)
如果您确实需要这样做java.util.Calendar,您可能可以使用类似这样的东西(未经测试):
// You really want to do all of this on a "date" basis, without DST messing
// things up...
Calendar firstDay = Calendar.getInstance(TimeZone.getTimeZone("UTC"), Locale.US);
firstDay.set(Calendar.DAY_OF_YEAR, 1);
while (firstDay.get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY) {
firstDay.add(Calendar.DAY, 1);
}
// firstDay is now at the start of week 1 from a mongodb perspective...
// We just need to add the number of weeks.
firstDay.add(Calendar.Day, (mongoWeekNumber - 1) * 7);
Run Code Online (Sandbox Code Playgroud)
请注意,如果周数为 0,则一周的开始很可能是当前日历年之前的一个日历年。
如果您可以选择使用哪个日期/时间 API,我强烈建议您使用 Joda Time 或java.time而不是Calendar- 那么您可以使用它LocalDate,并拥有更理智的时间。
| 归档时间: |
|
| 查看次数: |
1062 次 |
| 最近记录: |