V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
justest123
V2EX  ›  程序员

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

  •  
  •   justest123 · 221 天前 · 1153 次点击
    这是一个创建于 221 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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  
       221 天前
    没什么, 就是 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
       221 天前
    @alfredhot 我测试发现这种格式的时间,只有在今天之后的才会格式化出错,之前的都正常可以解析哎
    lululau
        3
    lululau  
       221 天前
    看文档啊~年轻人~~
    之前的都正常可以解析,你实际试了吗,Date.parse("1/Jan/2000:00:00:00") 可以正常解析吗
    justest123
        4
    justest123  
    OP
       221 天前
    @alfredhot
    @lululau
    多谢两位大佬教导,学习了
    alfredhot
        5
    alfredhot  
       219 天前   ❤️ 1
    @justest123 #2
    看来 Date.parse 会将解析不出来的年份用现在的年份填充,
    所以 Date.parse("1/Jan/2021:00:00:00 +0800") 在去年会被解析成正确的日期.
    纯属误打误撞哈
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3980 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 09:51 · PVG 17:51 · LAX 02:51 · JFK 05:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.