如何解决公历 WEEK_OF_YEAR 如何运作
为什么 calendar.WEEK_OF_YEAR
打印 3 而不是 6。
GregorianCalendar calendar = new GregorianCalendar();
System.out.println("time"+calendar.getTime());
System.out.println("week of year "+calendar.WEEK_OF_YEAR);
time Tue Feb 09 12:58:02 IST 2021
week of year 3
解决方法
tl;博士
git diff-index
2021 年 February 9,2021 is in week # 6 的 ISO 8601 week-based year,从 2021 年 1 月 4 日星期一到 2022 年 1 月 2 日星期日(含)运行。
在标准表示法中,2021 年 2 月 9 日是 2021 年以周为基础的年份的第六周的第二个星期二:LocalDate.now().get( IsoFields.WEEK_OF_WEEK_BASED_YEAR )
详情
可怕的类 2021-W06-2
多年前被 JSR 310 中定义的现代 java.time 类所取代。
java.time
获取当前日期。
GregorianCalendar
使用 definition of ISO 8601 获取基于周的一年中的一周。在这个定义中:
- 每周一至周日,以及
- 第 1 周包含日历年的第一个星期四。
根据该定义,每个基于周的年份都有 52 或 整整 53 周。
LocalDate today = LocalDate.now( ZoneId.of( "Asia/Kolkata" ) ) ;
并获取该日期基于周的年份的年份编号。这可能与第一周和最后一周的日历年编号不同。
int week = today.get ( IsoFields.WEEK_OF_WEEK_BASED_YEAR );
例如,2021 年 ISO 8601 基于周的年份从 2021 年 1 月 4 日开始。2021 年 2 月 9 日在第 6 周。
参见 ISO 8601 2021 年中的 this list of weeks。
,calendar.WEEK_OF_YEAR
是一个常量,你不能那样使用它。
您可能指的是 calendar.get(Calendar.WEEK_OF_YEAR)
(并且,今天 2 月 9 日它将打印 7,而不是 6,因为它是基于 1,而不是基于 0)。
请注意,正如 Basil Bourque 的精彩回答所解释的那样,您应该使用新的 DateTime API。
,java.util
的日期时间 API 及其格式化 API SimpleDateFormat
已过时且容易出错。建议完全停止使用它们并切换到 modern date-time API。
- 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用 ThreeTen-Backport,它将大部分 java.time 功能向后移植到 Java 6 和 7。
- 如果您正在为 Android 项目工作并且您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaring 和 How to use ThreeTenABP in Android Project。
answer by Basil Bourque 很好地解释了如何使用 Java SE 8 日期时间 API。如果您仍想使用旧 API,您有几个选择:
import java.text.SimpleDateFormat;
import java.util.Calendar;
class Main {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
// Getting current week using SimpleDateFormat
System.out.println("Current week: " + new SimpleDateFormat("w").format(calendar.getTime()));
// Getting current week using Calendar.WEEK_OF_YEAR
System.out.println("Current week: " + calendar.get(Calendar.WEEK_OF_YEAR));
}
}
输出:
Current week: 6
Current week: 6
第 01 周的 ISO 8601 definition 是包含公历年(即一月)第一个 Thursday
的那一周。根据此定义,2021 年的第 1 周从 1 月 4 日开始,因此当前周是第 6 周。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。