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 10: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 规范的库吧
|