【问题标题】:Rails - Convert time to stringRails - 将时间转换为字符串
【发布时间】:2020-10-21 18:11:54
【问题描述】:
这是我要转换的时间格式
time = Time.parse('2020-07-02 03:59:59.999 UTC')
#=> 2020-07-02 03:59:59 UTC
我想转成这种格式的字符串。
"2020-07-02T03:59:59.999Z"
我试过了。
time.strftime("%Y-%m-%dT%H:%M:%S.999Z")
这是正确的吗?有更好的方法吗?
【问题讨论】:
标签:
ruby-on-rails
ruby
datetime
time
【解决方案1】:
您可以只使用 Time#iso8601 和所需的小数位数作为参数:
time = Time.current.end_of_hour
time.iso8601(3) #=> "2020-07-01T10:59:59.999Z"
【解决方案2】:
如果您想通过strftime 明确处理输出格式,请记住以下几点:
您应该使用%L 来获取实际毫秒数,而不是硬编码999:
time = Time.parse('2020-07-02 03:59:59.999 UTC')
#=> 2020-07-02 03:59:59 UTC
time.strftime('%Y-%m-%dT%H:%M:%S.%LZ')
#=> "2020-07-02T03:59:59.999Z"
使用常见格式的组合,例如%F 为%Y-%m-%d 和%T 为%H:%M:%S:
time.strftime('%FT%T.%LZ')
#=> "2020-07-02T03:59:59.999Z"
如果您处理的是 UTC 以外的时区(可能是您机器的本地时区),请确保首先将您的时间实例转换为 utc:
time = Time.parse('2020-07-02 05:59:59.999+02:00')
#=> 2020-07-02 05:59:59 +0200
time.utc
#=> 2020-07-02 03:59:59 UTC
time.strftime('%FT%T.%LZ')
#=> "2020-07-02T03:59:59.999Z"
或使用%z / %:z 附加实际时区偏移量:
time = Time.parse('2020-07-02 05:59:59.999+02:00')
time.strftime('%FT%T.%L%:z')
#=> "2020-07-02T05:59:59.999+02:00"