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

发现 Ruby 格式化日期有点奇怪, 1/Jan/2022:00:00:00 会格式化成 2021 年 1 月 1 日

  •  
  •   justest123 · 2021-12-31 11:38:03 +08:00 · 1654 次点击
    这是一个创建于 1087 天前的主题,其中的信息可能已经有所发展或是发生改变。
    irb(main):019:0> require "date"
    => true
    irb(main):020:0> Date.new(2022,1,1).to_s
    => "2022-01-01"
    irb(main):021:0> Date.parse("2022-01-01").to_s
    => "2022-01-01"
    irb(main):022:0> Date.parse("1st Jan 2022").to_s
    => "2022-01-01"
    irb(main):023:0> Date.parse("1/Jan/2022:00:00:00 +0800").to_s
    => "2021-01-01"
    irb(main):024:0> Date.parse("1/Jan/2022").to_s
    => "2022-01-01"
    irb(main):025:0> Date.parse("1/Jan/2022:00:00:00").to_s
    => "2021-01-01"
    

    偶然发现的现象,Nginx 日志里的这种格式的时间,带上时间或时间+时区后反而格式化错了,而 Date 支持的其他格式都没有问题,简单搜索一下没搜到是什么原因

    5 条回复    2022-01-01 19:19:50 +08:00
    alfredhot
        1
    alfredhot  
       2021-12-31 12:31:26 +08:00
    没什么, 就是 ruby 不支持这个时间格式而已.
    你可以把日期和时间中间的 ':' 换成 'T'
    或者也可以用 strptime 转义
    如下:

    2.7.3 :001 > require 'date'
    => true
    2.7.3 :002 > Date.parse("1/Jan/2022:00:00:00").to_s
    => "2021-01-01"
    2.7.3 :003 > Date.parse("1/Jan/2022T00:00:00").to_s
    => "2022-01-01"
    2.7.3 :004 > Date.strptime("1/Jan/2022:00:00:00", '%d/%b/%Y:%H:%M:%S').to_s
    => "2022-01-01"
    justest123
        2
    justest123  
    OP
       2021-12-31 13:13:06 +08:00
    @alfredhot 我测试发现这种格式的时间,只有在今天之后的才会格式化出错,之前的都正常可以解析哎
    lululau
        3
    lululau  
       2021-12-31 13:58:47 +08:00
    看文档啊~年轻人~~
    之前的都正常可以解析,你实际试了吗,Date.parse("1/Jan/2000:00:00:00") 可以正常解析吗
    justest123
        4
    justest123  
    OP
       2021-12-31 14:06:01 +08:00
    @alfredhot
    @lululau
    多谢两位大佬教导,学习了
    alfredhot
        5
    alfredhot  
       2022-01-01 19:19:50 +08:00   ❤️ 1
    @justest123 #2
    看来 Date.parse 会将解析不出来的年份用现在的年份填充,
    所以 Date.parse("1/Jan/2021:00:00:00 +0800") 在去年会被解析成正确的日期.
    纯属误打误撞哈
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   879 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 20:38 · PVG 04:38 · LAX 12:38 · JFK 15:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.