V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
duojiao
V2EX  ›  程序员

Java 的 2020 年最后一天日期出 bug 了?这是什么底层原理?

  •  1
     
  •   duojiao · 2020-12-31 13:59:03 +08:00 · 5603 次点击
    这是一个创建于 1457 天前的主题,其中的信息可能已经有所发展或是发生改变。

    jshell> import java.text.SimpleDateFormat;

    jshell> void test(){ SimpleDateFormat smf = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss"); String curTime = smf.format(new Date()); System.out.println(curTime); } | 已修改 方法 test()

    jshell> test(); 2021-12-31 13:57:11

    我和同事试了都是这样,你们也是吗, java8 编译模式和我的 java11 交互式都是这样

    第 1 条附言  ·  2020-12-31 15:54:25 +08:00

    哈哈我是傻了才发了个年经贴,那就祝大家元旦快乐吧🐶🐶

    第 2 条附言  ·  2020-12-31 15:56:33 +08:00

    突然有点感叹,这些睿智问题就是这样一年又一年陪着我们过来。

    37 条回复    2021-01-01 15:03:06 +08:00
    Asuka0947
        1
    Asuka0947  
       2020-12-31 14:03:14 +08:00
    YYYY 和 yyyy 不一样的,YYYY 按周算,跨年了,这周算 2021 年
    MineDog
        2
    MineDog  
       2020-12-31 14:04:14 +08:00
    YYYY 大写的问题吧
    hahastudio
        3
    hahastudio  
       2020-12-31 14:06:32 +08:00
    /t/633650
    年经
    focuxin
        4
    focuxin  
       2020-12-31 14:07:31 +08:00
    YYYY 大写是当周的年份
    ebony0319
        5
    ebony0319  
       2020-12-31 14:12:04 +08:00 via Android
    同学,这是语感问题,上次我拿的那个这个问同事,听说不知道 YYYY 是什么,但是肯定不会写 YYYY.
    arloor
        6
    arloor  
       2020-12-31 14:14:37 +08:00
    你这个问题,每年都能出来
    去年我就在文章里看到了
    yaphets666
        7
    yaphets666  
       2020-12-31 14:14:57 +08:00
    这个问题去年出过啊 v2 也讲过
    MineDog
        8
    MineDog  
       2020-12-31 14:18:43 +08:00
    bk201
        9
    bk201  
       2020-12-31 14:20:34 +08:00   ❤️ 1
    我是不明白为啥 java 源码里 老搞这些令人混淆犯错的东西
    Vegetable
        10
    Vegetable  
       2020-12-31 14:21:09 +08:00   ❤️ 2
    年经贴
    yuk1no
        11
    yuk1no  
       2020-12-31 14:21:30 +08:00 via iPhone
    都 1202 年了 别用 SimpleDateFormat 了
    uselessVisitor
        12
    uselessVisitor  
       2020-12-31 14:24:27 +08:00 via Android
    用 DateTimeFormatter
    wysnylc
        13
    wysnylc  
       2020-12-31 14:25:21 +08:00
    @bk201 #9
    盲人不要写代码
    chendy
        14
    chendy  
       2020-12-31 14:25:45 +08:00   ❤️ 1
    YYYY 是按周算的,只要有一天在下一年,这一周就是下一年的第一周,于是这周就已经到了下一年
    PiersSoCool
        15
    PiersSoCool  
       2020-12-31 14:26:04 +08:00
    用啥都没区别,就是 YYYY 和 yyyy 的问题
    话说这种垃圾设计是怎么变成标准的 这区分度也太低了 太容易用错了吧
    duojiao
        16
    duojiao  
    OP
       2020-12-31 14:27:54 +08:00   ❤️ 1
    懂了,谢谢各位,傻了发了年经贴哈哈
    wysnylc
        17
    wysnylc  
       2020-12-31 14:28:05 +08:00

    每年都会有新同学来问,但是不肯看文档
    wysnylc
        18
    wysnylc  
       2020-12-31 14:29:39 +08:00
    @PiersSoCool #15 我觉得是人的问题,分的清楚 MM 和 mm HH 和 hh,却把 YYYY 当成 yyyy?这是思维割裂了吗?
    不懂 MM 和 mm HH 和 hh 的区别啊,那没事了
    24KPureFather
        19
    24KPureFather  
       2020-12-31 14:30:24 +08:00   ❤️ 4
    我在 idea 里面把你的 test() 方法中的代码跑一了一边,确实会出现 2021-12-31 13:57:11 这个结果,但是 idea 会给你警告 Uppercase 'YYYY' (week year) pattern is used: probably 'yyyy' (year) was intended 的,把 YYYY 改成小写的 yyyy 就好了,idea 提醒真香~
    javen73
        20
    javen73  
       2020-12-31 14:34:25 +08:00
    @hahastudio #3 哈哈哈,我说这个标题怎么这么熟悉。
    JinTianYi456
        21
    JinTianYi456  
       2020-12-31 14:34:27 +08:00
    “年轻人不讲武德”,请看仔细了文档再编程 [doge]
    JinTianYi456
        22
    JinTianYi456  
       2020-12-31 14:35:39 +08:00
    @wysnylc #17 那是什么网站?
    Jooooooooo
        23
    Jooooooooo  
       2020-12-31 14:45:41 +08:00
    一年又一年

    又到年底了
    hodur
        24
    hodur  
       2020-12-31 15:01:57 +08:00
    也算是年经问题了,每年年底都冒出来
    glasslion
        25
    glasslion  
       2020-12-31 15:03:36 +08:00
    @wysnylc 就是不良设计。如果分不清 MM mm, HH hh, 在调试,测试时立马可以发现, 但 YYYY 每年就几天可以重现。
    wysnylc
        26
    wysnylc  
       2020-12-31 15:09:11 +08:00
    @glasslion #25 HH 和 hh 一样难以发现,如果测试的时间在 0-12 点这二者没有区别
    别再为不严谨,不看文档找借口了
    lskjdfgl
        27
    lskjdfgl  
       2020-12-31 15:36:14 +08:00
    @beichenhpy 同样也有这个问题
    // 2020-12-31
    System.out.println(DateTimeFormatter.ofPattern("yyyy-MM-dd").format(LocalDate.now()));

    // 2021-12-31
    System.out.println(DateTimeFormatter.ofPattern("YYYY-MM-dd").format(LocalDate.now()));
    rodneya
        28
    rodneya  
       2020-12-31 15:42:37 +08:00
    去年我也赶上了一次,,还是线上系统 都快下班了 结果临时加班,,,
    NickYUyu
        29
    NickYUyu  
       2020-12-31 16:06:05 +08:00
    好快啊 一年就过去了
    axbx
        30
    axbx  
       2020-12-31 16:56:01 +08:00
    @bk201 历史的包袱
    jintianfengda
        31
    jintianfengda  
       2020-12-31 16:58:45 +08:00
    看到这个问题我就知道,又是新的一年了
    wc951
        32
    wc951  
       2020-12-31 17:16:25 +08:00 via Android
    这是 ISO8061 的规定
    fangcan
        33
    fangcan  
       2020-12-31 18:29:02 +08:00
    前几天刚好也遇到这个问题
    pigmen
        34
    pigmen  
       2020-12-31 19:06:50 +08:00
    这么一看 go 的 format 还是香
    ddllzz
        35
    ddllzz  
       2020-12-31 20:10:02 +08:00
    hhhh,一年又过去了
    EminemW
        36
    EminemW  
       2021-01-01 00:24:59 +08:00
    这问题,犯过一次就不能再犯了,一般都用 yyyy
    sampeng
        37
    sampeng  
       2021-01-01 15:03:06 +08:00 via iPhone
    昨天晚上我还检查了公司所有重要代码库看有没有这个问题,很欣慰。没有,到晚上就招受了社会的毒打…合作伙伴传过来的有一些就是 2021 年…蛋疼得不行。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   937 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 20:43 · PVG 04:43 · LAX 12:43 · JFK 15:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.