Ruby中的时间ISO 8601

时间:2015-10-21 15:02:37

标签: ruby date-formatting

我正在尝试使用此格式返回日期

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

我已经测试了

 Time.now.iso8601
 => "2015-10-21T09:47:50-04:00"

但我没有相同的格式

TKS

4 个答案:

答案 0 :(得分:28)

您可以自己使用strftime并按照here

所述创建所需的格式

您指定的格式应为%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)

答案 1 :(得分:14)

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

pry(main)> Time.now.iso8601(3)
=> "2017-01-17T12:31:26.695+11:00"

答案 2 :(得分:7)

似乎主要问题是您希望输出为UTC编码的ISO 8601时间戳,而Ruby默认使用Time值的时区-这很有可能,尤其是在创建值时使用Time.now(您的本地时区)。

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

now = Time.now
# convert to UTC and format
puts now.utc.iso8601

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

注意:

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

答案 3 :(得分:1)

您尝试过使用Date吗?

Date.new(2018,5,25).iso8601 # returns "2018-05-25"

今天是:

Date.today.iso8601