使用 Joda-Time 进行区域设置的一周的开始

2022-08-31 17:01:23

您如何根据使用Joda-Time的给定区域设置确定一周中的哪一天被视为“开始”?

要点:大多数国家/地区使用国际标准星期一作为一周的第一天(!还有一群人使用星期天(特别是美国)。其他人显然是星期六。有些显然是星期三?!

维基百科“七天周”#Week_number


答案 1

Joda-Time使用ISO标准周一至周日。

它不能获取一周的第一天,也不能根据标准星期一以外的任何一天返回星期几索引。最后,周数始终根据 ISO 规则进行计算。


答案 2

您没有理由不能利用 JDK 至少来查找给定区域设置的“本周的习惯性开始”。唯一棘手的部分是翻译工作日的常量,其中两者都是1到7,但java.util.Calendar移动了1,Calendar.MONDAY = 2 vs. DateTimeConstants.MONDAY = 1。

无论如何,使用这个函数:

/**
 * Gets the first day of the week, in the default locale.
 *
 * @return a value in the range of {@link DateTimeConstants#MONDAY} to
 *         {@link DateTimeConstants#SUNDAY}.
 */
private static final int getFirstDayOfWeek() {
  return ((Calendar.getInstance().getFirstDayOfWeek() + 5) % 7) + 1;
}

将区域设置添加到 Calendar.getInstance() 以获取除默认区域设置以外的某些区域设置的结果。


推荐