【问题标题】: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"
    

    【讨论】:

      【解决方案3】:

      对于 API,您应该使用 utc.iso8601:

      > timestamp = Time.now.utc.iso8601
      => "2015-07-04T21:53:23Z"
      

      见: https://thoughtbot.com/blog/its-about-time-zones#working-with-apis

      【讨论】:

        猜你喜欢
        • 2014-10-13
        • 1970-01-01
        • 2012-02-03
        • 1970-01-01
        • 2012-07-29
        • 2011-07-04
        • 2011-10-30
        相关资源
        最近更新 更多