Ruby中的时间ISO 8601

Bol*_*olo 26 ruby date-formatting

我想用这种格式返回日期

2015-10-07T00:32:50.877 + 0000

我测试过了

 Time.now.iso8601
 => "2015-10-21T09:47:50-04:00"
Run Code Online (Sandbox Code Playgroud)

但我没有相同的格式

TKS

dav*_*rac 30

您可以使用自己的strftime,创建一个要描述的格式在这里

您指定的格式应该是 %Y-%m-%dT%H:%M:%S.%L%z

所以完整的Ruby语句就是这样 Time.now.strftime('%Y-%m-%dT%H:%M:%S.%L%z')

各种ISO 8601格式:

%Y%m%d           => 20071119                  Calendar date (basic)
%F               => 2007-11-19                Calendar date (extended)
%Y-%m            => 2007-11                   Calendar date, reduced accuracy, specific month
%Y               => 2007                      Calendar date, reduced accuracy, specific year
%C               => 20                        Calendar date, reduced accuracy, specific century
%Y%j             => 2007323                   Ordinal date (basic)
%Y-%j            => 2007-323                  Ordinal date (extended)
%GW%V%u          => 2007W471                  Week date (basic)
%G-W%V-%u        => 2007-W47-1                Week date (extended)
%GW%V            => 2007W47                   Week date, reduced accuracy, specific week (basic)
%G-W%V           => 2007-W47                  Week date, reduced accuracy, specific week (extended)
%H%M%S           => 083748                    Local time (basic)
%T               => 08:37:48                  Local time (extended)
%H%M             => 0837                      Local time, reduced accuracy, specific minute (basic)
%H:%M            => 08:37                     Local time, reduced accuracy, specific minute (extended)
%H               => 08                        Local time, reduced accuracy, specific hour
%H%M%S,%L        => 083748,000                Local time with decimal fraction, comma as decimal sign (basic)
%T,%L            => 08:37:48,000              Local time with decimal fraction, comma as decimal sign (extended)
%H%M%S.%L        => 083748.000                Local time with decimal fraction, full stop as decimal sign (basic)
%T.%L            => 08:37:48.000              Local time with decimal fraction, full stop as decimal sign (extended)
%H%M%S%z         => 083748-0600               Local time and the difference from UTC (basic)
%T%:z            => 08:37:48-06:00            Local time and the difference from UTC (extended)
%Y%m%dT%H%M%S%z  => 20071119T083748-0600      Date and time of day for calendar date (basic)
%FT%T%:z         => 2007-11-19T08:37:48-06:00 Date and time of day for calendar date (extended)
%Y%jT%H%M%S%z    => 2007323T083748-0600       Date and time of day for ordinal date (basic)
%Y-%jT%T%:z      => 2007-323T08:37:48-06:00   Date and time of day for ordinal date (extended)
%GW%V%uT%H%M%S%z => 2007W471T083748-0600      Date and time of day for week date (basic)
%G-W%V-%uT%T%:z  => 2007-W47-1T08:37:48-06:00 Date and time of day for week date (extended)
%Y%m%dT%H%M      => 20071119T0837             Calendar date and local time (basic)
%FT%R            => 2007-11-19T08:37          Calendar date and local time (extended)
%Y%jT%H%MZ       => 2007323T0837Z             Ordinal date and UTC of day (basic)
%Y-%jT%RZ        => 2007-323T08:37Z           Ordinal date and UTC of day (extended)
%GW%V%uT%H%M%z   => 2007W471T0837-0600        Week date and local time and difference from UTC (basic)
%G-W%V-%uT%R%:z  => 2007-W47-1T08:37-06:00    Week date and local time and difference from UTC (extended)
Run Code Online (Sandbox Code Playgroud)


ada*_*amc 18

如果您只想包含小数秒,可以使用DateTime#iso8601([n = 0])→string:

pry(main)> require 'date'
pry(main)> DateTime.now.iso8601(3)
=> "2017-01-17T12:31:26.695+11:00"
Run Code Online (Sandbox Code Playgroud)

  • 我更新了答案以同时使用 Ruby 和 Rails (2认同)

Gus*_*uss 12

似乎主要问题是您希望输出是 UTC 编码的 ISO 8601 时间戳,而 Ruby 默认使用Time值的时区- 这很可能,特别是如果您使用Time.now本地时区创建值。

解决方案是Time使用以下#utc方法将值转换为 UTC 时区:

now = Time.now
# convert to UTC and format
puts now.utc.iso8601
Run Code Online (Sandbox Code Playgroud)

这将输出2020-04-20T20:46:31Z-Z相当于+00:00并表示 UTC(或美国军事术语中的“祖鲁时间”)。任何符合 ISO-8601 的实现都应该接受Z+00:00.

笔记:

iso8601对方法Time的实例是一个扩展。它是标准库的一部分,但您必须使用require 'time'. 这还会为Time该类加载其他有用的扩展。


小智 7

你试过日期吗?

Date.new(2018,5,25).iso8601 # returns "2018-05-25"
Run Code Online (Sandbox Code Playgroud)

今天,它将是:

Date.today.iso8601
Run Code Online (Sandbox Code Playgroud)