同事之前的代码使用 YYYY-MM-dd 今天被捶了 [捂脸]
1
GuryYu 2019-12-30 17:41:46 +08:00
同遇到😃
|
2
mahogany 2019-12-30 17:49:59 +08:00
你说的这个同事是不是...
|
3
i36lib 2019-12-30 17:57:14 +08:00
提了什么 BUG ?
|
4
eve1yb0dy 2019-12-30 17:58:38 +08:00 1
<?php date('o-W'); // 跨年查询 BUG 用 o-W 代替 Y-W
|
5
ColoThor 2019-12-30 17:59:30 +08:00
黑人问号.jpg
|
6
BenjaminReed 2019-12-30 18:03:21 +08:00
一不小心就踩坑了 😃
|
7
aliveyang 2019-12-30 18:03:48 +08:00 1
黑人问号.jpg
|
8
chendy 2019-12-30 18:05:53 +08:00 45
YYYY 是 week-based-year,今天就已经 2020 年了
yyyy 还是 2019 年 |
9
wpblank 2019-12-30 18:08:27 +08:00
哈哈哈哈 我在昨天也遇见了
|
10
annielong 2019-12-30 18:08:28 +08:00
一直用 yyyy-MM-dd
|
11
opengps 2019-12-30 18:15:47 +08:00 1
为了照顾前端同学,我更习惯 yyyy/MM/dd HH:mm:ss
|
12
PerFectTime 2019-12-30 18:21:45 +08:00
|
13
Curtion 2019-12-30 18:25:07 +08:00
我写的 HH:MM::ss。。。。我服了
|
14
beastk 2019-12-30 18:26:50 +08:00 via iPhone
Y-m-d H:i:s 会呗锤吗
|
15
jybox 2019-12-30 18:32:13 +08:00
|
17
itwhat 2019-12-30 18:36:46 +08:00
Python 不受影响
|
18
W1angMh 2019-12-30 18:57:08 +08:00
java 刚毕业的时候写过 HH:MM:SS 做时分秒转换 被同事笑了好久
|
19
iFlicker 2019-12-30 20:02:54 +08:00
试了一下笑死我了
|
20
scalaer 2019-12-30 20:06:51 +08:00
spark sql
---- select ..., from_unixtime(unix_timestamp(time, "dd/MMM/yyyy:HH:mm:ss +0800"), "YYYY-MM-dd HH:mm:00") as time from xxx 然后解析到 2020 年了 ... |
21
xuyang2 2019-12-30 20:16:55 +08:00
|
23
WordTian 2019-12-30 20:33:14 +08:00 via Android
今天公司有个系统崩了,应该和这个有关系
|
24
ccming 2019-12-30 20:45:54 +08:00 via iPhone
|
25
ccming 2019-12-30 20:46:37 +08:00 via iPhone 1
|
26
w99w 2019-12-30 21:11:20 +08:00
|
28
NealCCC 2019-12-30 21:46:21 +08:00 via Android
我去,今天刚改了个同事的这个 bug
|
29
whileFalse 2019-12-30 21:47:52 +08:00 via iPhone
想请教这个 week based year 是个啥,以及有没有基于农历的公历纪年,谢谢
|
30
lithiumii 2019-12-30 21:53:27 +08:00
神奇,写 py 而且长期使用 pandas.Timestamp 而非自带的 datetime (因为前者更无脑)的我表示涨姿势了
|
31
rockyou12 2019-12-30 21:55:40 +08:00 1
所以这个 week based year 有啥实际业务用得到的嘛,实在想不出来……
|
32
Lax 2019-12-30 22:11:39 +08:00
前几个月在淘宝 app 的消息列表看到这个问题,当时就知道年底会来这么一波,哈哈哈
|
33
redtea 2019-12-30 22:25:54 +08:00 via iPhone
昨天在饿了么买了优惠券,用不了,显示的开始时间是 1 年后,应该也是这个问题。
|
34
xkzhangsan 2019-12-30 23:46:47 +08:00
|
35
limbo0 2019-12-30 23:51:54 +08:00 via Android
这个 java 和 python 的计算方式还不一样,预计我们的系统 2022 年会有一次 bug
|
36
nikoo 2019-12-30 23:55:22 +08:00
week based year 是什么意思?
为什么现在才 2019 用 "YYYY" 会返回 2020 ? |
37
Yvette 2019-12-31 00:23:28 +08:00 3
If a week is split at the end of the year then it is assigned to the year in which more that half of the days of that week occur.
https://nakedsecurity.sophos.com/2019/12/23/serious-security-the-decade-ending-y2k-bug-that-wasnt/ |
38
ddllzz 2019-12-31 00:36:47 +08:00 via Android
昨天在 Laravel 中用到 Carbon 包的 weekOfYear 方法,返回结果是 1,还以为是 bug,其实标准就是认为昨天是 2020 年第一周。
看了上面各位说的,感觉自己就是个菜逼。 |
40
imycc 2019-12-31 01:00:16 +08:00
还有这么人性化的接口,之前真没想到过。。
|
41
Count0 2019-12-31 02:31:53 +08:00
千年虫再现。
|
43
lihongming 2019-12-31 03:46:36 +08:00 via iPhone
这些人都哪儿学的?我从一开始学日期格式就是小-大-小 大:小:小,也没见开源代码里用过大 Y
|
44
wensonsmith 2019-12-31 07:57:05 +08:00 via iPhone 1
Y-m-d 亚麻跌
|
45
0312birdzhang 2019-12-31 08:29:38 +08:00 via iPhone
吓得我赶紧看了一下
|
46
NSAtools 2019-12-31 08:31:29 +08:00
昨天刚填的坑
|
47
xwbz2018 2019-12-31 08:37:33 +08:00 via Android
JAVA8 的 localdate 用的是 uuuu-MM-dd,不知道有没有坑
|
48
oneisall8955 2019-12-31 08:39:15 +08:00 via Android
笑死了,去年这个时候用的 YYYY,业务说时间不对我还不信,检查了一波脑壳痛,就这个地方用了大写的 Y
|
49
killergun 2019-12-31 08:42:10 +08:00
C# 没这问题
|
50
May725 2019-12-31 08:46:00 +08:00 via iPhone
涨姿势了
|
51
acthtml 2019-12-31 08:46:58 +08:00
got
|
52
randyo 2019-12-31 08:47:16 +08:00 via Android
还好前端 moment 根本不支持小 y
|
53
xuanbg 2019-12-31 09:02:42 +08:00
为啥要写 YYYY ?没有 get 到这个点呢。标准的写法不都是 yyyy-MM-dd 吗
|
54
IMCA1024 2019-12-31 09:09:39 +08:00
一直习惯用 yyyy-MM-dd HH:mm:ss 改一个都不习惯
|
56
songjiaxin2008 2019-12-31 09:24:25 +08:00
golang 没有这个问题
```golang fmt.Println(time.Now().Format("2006-01-02 15:04:05")) // 2019-12-31 09:25:20 ``` |
57
Mutoo 2019-12-31 09:29:37 +08:00
moment 使用 YYYY
date-fns 使用 yyyy https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md |
58
bobuick 2019-12-31 09:36:14 +08:00
无敌大坑货。 官方就不应该出现 YYYY 这种算法方式,坑人。
|
60
JR1024 2019-12-31 09:42:33 +08:00 1
Calendar calendar = Calendar.getInstance();
// 2019-12-31 calendar.set(2019, Calendar.DECEMBER, 31); Date strDate1 = calendar.getTime(); // 2020-01-01 calendar.set(2020, Calendar.JANUARY, 1); Date strDate2 = calendar.getTime(); // 大写 YYYY DateFormat formatUpperCase = new SimpleDateFormat("YYYY/MM/dd"); System.out.println("2019-12-31 to YYYY/MM/dd: " + formatUpperCase.format(strDate1)); System.out.println("2020-01-01 to YYYY/MM/dd: " + formatUpperCase.format(strDate2)); // 小写 YYYY DateFormat formatLowerCase = new SimpleDateFormat("yyyy/MM/dd"); System.out.println("2019-12-31 to yyyy/MM/dd: " + formatLowerCase.format(strDate1)); System.out.println("2020-01-01 to yyyy/MM/dd: " + formatLowerCase.format(strDate2)); |
61
b821025551b 2019-12-31 09:51:44 +08:00 2
@xwbz2018 #47 u 和 y 的区别主要是公元前的年份,用 y 是正数,需要加个 G 来区分是 AD 还是 BC ;用 u 直接负数代表公元前,但公元前部分+1 才和我们常规记年相等。
|
62
WEBUG 2019-12-31 09:57:33 +08:00 via Android
弱弱问一句 sql 里没有这个问题吧
|
63
ladypxy 2019-12-31 09:59:20 +08:00 via iPhone
腾讯都挂了好么
QQ 嗯生日提醒,明明是 2020 年 1 月,然后非提说日子已经过了 |
64
demo 2019-12-31 10:05:18 +08:00
date-fns^2.8.1 的 YYYY 未发现这个问题
|
65
encro 2019-12-31 10:05:18 +08:00
https://www.php.net/manual/en/function.date.php
``` Things to be aware of when using week numbers with years. <?php echo date("YW", strtotime("2011-01-07")); // gives 201101 echo date("YW", strtotime("2011-12-31")); // gives 201152 echo date("YW", strtotime("2011-01-01")); // gives 201152 too ?> BUT <?php echo date("oW", strtotime("2011-01-07")); // gives 201101 echo date("oW", strtotime("2011-12-31")); // gives 201152 echo date("oW", strtotime("2011-01-01")); // gives 201052 (Year is different than previous example) ?> Reason: Y is year from the date o is ISO-8601 year number W is ISO-8601 week number of year Conclusion: if using 'W' for the week number use 'o' for the year. ``` |
66
EricFuture 2019-12-31 10:10:31 +08:00
一直用的 yyyy,没想到还有这个 bug,get 了,那么问题来了 YYYY 存在的意义是什么呢?
|
67
JamesR 2019-12-31 10:10:53 +08:00
关键是有 Bug 价羊毛可薅吗?
|
68
zsdroid 2019-12-31 10:11:56 +08:00
YYYY 是表示:当天所在的周属于的年份,一周从周日开始,周六结束,只要本周跨年,那么这周就算入下一年。
|
69
yujieyu7 2019-12-31 10:12:22 +08:00
phper 表示 'Y-m-d' 运行良好
|
70
Martin9 2019-12-31 10:12:52 +08:00
cao,这周末也踩了这个坑。
|
71
zsdroid 2019-12-31 10:24:17 +08:00 2
我查了下,YYYY 的意义:“YYYY 表示的是以周为基础的年度,会计人员依靠这一点来避免在两个不同的年份之间拆分周数,从而避免公司的工资单。”
|
72
daquandiao2 2019-12-31 10:26:03 +08:00
js 呢
|
73
est 2019-12-31 10:29:23 +08:00
看了下这个 week-based year 是 ISO 8601 规定的。
|
75
burnbrid 2019-12-31 10:38:28 +08:00
这个 BUG 怎么重现?我 jdk6 用 SimpleDateFormat 没问题啊?怎么重现谁教教我?
|
76
wc951 2019-12-31 10:41:06 +08:00 via Android
oracle 都是大写不存在这个问题
|
77
xu123456 2019-12-31 10:43:58 +08:00
yyyy-mm-dd HH:mm:ss
|
78
fengdechoulian 2019-12-31 11:16:12 +08:00
你别说我遇到一个更奇葩的问题,ios 不支持 new Date('2019-08-02 18:00:00')这样格式的日期转换,后来改成 new Date('2019/08/02 18:00:00')了,真坑。
|
79
kelololy 2019-12-31 11:22:26 +08:00
丢人了,之前真的没注意这个
|
80
burnbrid 2019-12-31 11:23:06 +08:00
知道了,这是 JAVA8 日期格式化 SimpleDateFormat 的一个小坑,不算 BUG。jdk6 不支持大写的 Y。
Date date = new Date(); SimpleDateFormat dateFormat = new SimpleDateFormat("YYYY-MM-dd"); |
81
sinu 2019-12-31 11:42:43 +08:00
之前还真没有注意到,不过一直用的公共的常量,检查了下,还好没问题。感谢提醒。
|
82
wc951 2019-12-31 11:45:49 +08:00 via Android
看源码就知道 jdk6 的日期格式化类大小写 y 走的是同一个分支
|
83
shuang 2019-12-31 11:47:18 +08:00
|
84
iugo 2019-12-31 11:49:52 +08:00
JavaScript 用 getFullYear() 方法.
moment 让我们用 `YYYY `. |
85
iugo 2019-12-31 12:12:47 +08:00
|
86
stone520 2019-12-31 12:30:42 +08:00
@fengdechoulian 开发小程序同遇到过
|
87
jorneyr 2019-12-31 12:39:22 +08:00
没问题,都是输出 2019-12-31
```java import java.time.LocalDate; import java.time.format.DateTimeFormatter; public class Test { public static void main(String[] args) throws Exception { System.out.println(LocalDate.now()); // 2019-12-31 System.out.println(DateTimeFormatter.ofPattern("yyyy-MM-dd").format(LocalDate.now())); // 2019-12-31 System.out.println(DateTimeFormatter.ofPattern("YYYY-MM-dd").format(LocalDate.now())); // 2019-12-31 } } ``` |
88
dotw2x 2019-12-31 12:43:26 +08:00 1
嘿嘿 , 完全不担心
```csharp > DateTime.Now.ToString("yyyy-MM-dd") "2019-12-31" > DateTime.Now.ToString("YYYY-MM-dd") "YYYY-12-31" > ``` |
89
gclove 2019-12-31 12:47:17 +08:00
没懂有什么问题
|
90
hiouyuu 2019-12-31 12:51:42 +08:00
week based year 一般是结合周来使用的:
比如 2019.12.31 对应的周应该是 2020W01,而不是 2019W53 |
91
fhsan 2019-12-31 12:55:39 +08:00
为了照顾前端同学,我更习惯 yyyy/MM/dd HH:mm:ss
|
92
TimeRain 2019-12-31 13:01:16 +08:00 via Android
时区问题吧,会相差 8 个小时,之前遇到过
|
93
cutlove 2019-12-31 13:08:36 +08:00
厉害了,大小写混用选手留下了惭愧的泪水、学无止境哇
|
95
chocotan 2019-12-31 13:13:32 +08:00
一直用 yyyy-MM-dd HH:mm:ss
|
96
suyuyu 2019-12-31 13:15:45 +08:00
直接给的时间戳,前端同事说你这一串数字是什么东西???
|
97
kakudesu 2019-12-31 13:33:20 +08:00
卧槽我还是第一次听说
|
98
yalanaika 2019-12-31 14:07:24 +08:00
delphi FormatDateTime: if Token in ['a'..'z'] then Dec(Token, 32);
|
99
billchenchina 2019-12-31 14:15:48 +08:00
根据 ISO-8601 和 GB/T 7408-2005,现在已经是 2020 年第一周了
billchenchina@HP-Pavilion-14-bf048tx:~$ date +%G 2020 billchenchina@HP-Pavilion-14-bf048tx:~$ date +%V 01 国际标准化组织在 ISO 8601 《数据存储和交换形式·信息交换·日期和时间的表示方法》中将星期一定为一星期的第一天。中华人民共和国国家标准 GB/T 7408-2005 《数据元和交换格式·信息交换·日期和时间表示法》和国际标准相同,也以周一为一周的第一天。 https://zh.wikipedia.org/wiki/%E6%98%9F%E6%9C%9F#%E9%80%B1%E9%A6%96%E9%97%AE%E9%A2%98 这周是 2019.12.30 - 2020.1.5,2019 年两天,2020 年五天。所以这周是 2020 年( |
100
fbzl 2019-12-31 15:32:36 +08:00
Objective-C 有同样问题
网上复制粘贴代码太多 |