
同事之前的代码使用 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 <?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 黑人问号.jpg |
8 chendy 2019-12-30 18:05:53 +08:00 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/span> 一直用 yyyy-MM-dd |
11 opengps 2019-12-30 18:15:47 +08:00 为了照顾前端同学,我更习惯 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 |
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 所以这个 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 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 年第一周。 看了上面各位说的,感觉自己就是个菜逼。 |
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 Y-m-d 亚麻跌 |
45 1daydayde 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 div class="reply_content">JAVA8 的 localdate 用的是 uuuu-MM-dd,不知道有没有坑 |
48 itechify PRO 笑死了,去年这个时候用的 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 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 @xwbz2018 #47 u 和 y 的区别主要是公元前的年份,用 y 是正数,需要加个 G 来区分是 AD 还是 BC ;用 u 直接负数代表元前,但公元前部分+1 才和我们常规记年相等。 |
62 WEBUG 2019-12-31 09:57:33 +08:00 via Android 弱弱问一句 sql 里没有这个问题吧 |
63 Dragonish3600 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 我查了下,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 嘿嘿 , 完全不担心 ```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 有同样问题 网上复制粘贴代码太多 |