大家都知道mysql的时间格式化函数DATE_FORMAT(),Java中格式化无非就是SimpleDateFormat
但是一般情况下都是格式化年月,按周格式化很少用
以 2021年1月17号 为例
mysql按周格式化:
%x-%v表示一年中第几周(星期一是周的第一天)
当然也有%X-%V(星期日是周的第一天)
更多的时间格式到这个网址看吧
https://www.w3school.com.cn/sql/func_date_format.asp
对于Java的format,字母对应含义如下
G | Era 标志符 | Text | AD |
y | 年 | Year | 1996 ; 96 |
M | 年中的月份 | Month | July ; Jul ; 07 |
w | 年中的周数 | Number | 27 |
W | 月份中的周数 | Number | 2 |
D | 年中的天数 | Number | 189 |
d | 月份中的天数 | Number | 10 |
F | 月份中的星期 | Number | 2 |
E | 星期中的天数 | Text | Tuesday ; Tue |
a | Am/pm 标记 | Text | PM |
H | 一天中的小时数(0-23) | Number | 0 |
k | 一天中的小时数(1-24) | Number | 24 |
K | am/pm 中的小时数(0-11) | Number | 0 |
h | am/pm 中的小时数(1-12) | Number | 12 |
mi | 小时中的分钟数 | Number | 30 |
s | 分钟中的秒数 | Number | 55 |
S | 毫秒数 | Number | 978 |
z | 时区 | General time zone | Pacific Standard Time ; PST ; GMT-08:00 |
Z | 时区 | RFC 822 time zone | -0800 |
那么对应Java解析如下
Calendar instance = Calendar.getInstance();
instance.set(2021,0,17,0,0,0);
String s = DateFormatUtils.format(instance.getTime(), "yyyy-w");
System.out.println(s);
但是得到的解析结果是
第四个星期,和mysql解析出来的不一致
为什么?
先对着日历看看
17号以mysql %x-%v来说,4号开始是第一个星期,11号开始是第二个星期,17号刚刚好是第二个星期结束
以Java时间解析yyyy-w来看,每个星期日是新的一个星期,1,2号是第一个星期,3-9号是第二个星期,类推17号是第四个星期开始
两者对应不起来,那要怎么样才能得到mysql里面的时间呢
LocalDateTime time = LocalDateTime.of(2021,1,17,0,0,0,0);
int week = time.get ( IsoFields.WEEK_OF_WEEK_BASED_YEAR);
int weekYear = time.get ( IsoFields.WEEK_BASED_YEAR );
System.out.println(weekYear+"-"+week);
IsoFields.WEEK_OF_WEEK_BASED_YEAR 对应的就是%x-%v这种形式
所以得到的
2021年第二个星期