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 支持的其他格式都没有问题,简单搜索一下没搜到是什么原因
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" |
2
justest123 OP @alfredhot 我测试发现这种格式的时间,只有在今天之后的才会格式化出错,之前的都正常可以解析哎
|
3
lululau 2021-12-31 13:58:47 +08:00
看文档啊~年轻人~~
之前的都正常可以解析,你实际试了吗,Date.parse("1/Jan/2000:00:00:00") 可以正常解析吗 |
4
justest123 OP |
5
alfredhot 2022-01-01 19:19:50 +08:00 1
@justest123 #2
看来 Date.parse 会将解析不出来的年份用现在的年份填充, 所以 Date.parse("1/Jan/2021:00:00:00 +0800") 在去年会被解析成正确的日期. 纯属误打误撞哈 |