RT,现在的需求是要做一个报表提醒功能,用户设置一个报表有效期限例如 2020 年第 1 到 2021 年第 52 周,并且每周三提醒当前周的报表。但是 java 在执行的时候需要知道当天属于当年的第几周,使用 Calendar 类转换的时候与前端周选择器控件输出的不一一致,尤其是跨年的时候,前端计算出来的可能是当年有 53 周,java 计算可能只有 52 周。所以想知道大家是怎么解决这类周期转换问题的
1 ITsWHY 2020-09-18 10:34:05 +08:00 日期格式的问题我们是前端做的 |
2 easonHHH 2020-09-18 10:38:03 +08:00 一般的 API 都支持配置从索引 0 开始或者从 1 开始(没有自己封装一层也行),又或者是周一 /周日作为周开始的吧,如果这些配置都统一的情况下,计算出来就是一样 |
![]() | 3 Torpedo 2020-09-18 10:44:44 +08:00 我记得是部分浏览器上,java 的 utc 时间解析和 js 不一样。 用 unix 时间戳就没事 |
![]() | 4 jiangnan01 OP @ITsWHY 在报表配置的时候遇到这个问题,我们也是这样做的,我前端给 java 把日期区间额外转换一份对应的第 N 周-第 n 周的数据,现在因为这个报表提醒是 java 后台自己跑的定时任务,需要 java 获取当前的时间然转换成当前属于第几周,这个时候跟前端转换的可能不一样 |
![]() | 5 jiangnan01 OP @Torpedo 是在 chrome 运行的 |
![]() | 6 jiangnan01 OP @easonHHH 请问 JAVA 是怎么设置这个周几作为一周开始的呢?我只知道前端可以使用 momentJS 设置语言然后设置周几作为一周开始,甚至一年的第一周以几月几日开始 |
7 easonHHH 2020-09-18 0:55:21 +08:00 @jiangnan01 #6 Java 不熟,但是看了一眼 API 文档里面应该是有的 https://docs.oracle.com/javase/8/docs/api/java/util/Calendar.html setFirstDayOfWeek(int value) Sets what the first day of the week is; e.g., SUNDAY in the U.S., MONDAY in France. |
![]() | 8 jiangnan01 OP @easonHHH 谢谢,找到了,再加上 setMinimalDaysInFirstWeek 这个方法可以和前端对应上了 |
9 Justin13 2020-09-18 12:42:00 +08:00 via Android isoweek 和 us week 的区别,方法就是前后端用同一套规则 |
10 renmu123 2020-09-18 13:34:52 +08:00 都用符合 iso 规范的库吧 |