如何从DateTime值中删除区域?

Dag*_*osi 30 ruby

我有这个DateTime:

=> Fri, 03 Feb 2012 11:52:42 -0500
Run Code Online (Sandbox Code Playgroud)

如何删除红宝石中的区域(-0500)?我只想要这样的东西:

=> Fri, 03 Feb 2012 11:52:42
Run Code Online (Sandbox Code Playgroud)

Phr*_*ogz 32

时间总是有一个区域(没有一个没有意义).您可以选择在打印时忽略它DateTime#strftime:

now = DateTime.now
puts now
#=> 2012-02-03T10:01:24-07:00

puts now.strftime('%a, %d %b %Y %H:%M:%S')
#=> Fri, 03 Feb 2012 10:01:24
Run Code Online (Sandbox Code Playgroud)

请参阅Time#strftime用于构造特定格式的奥术代码.

或者,您可能希望将DateTime转换为UTC以获得更一般的表示.

  • 一点也不!DateTime(与Time不同)仅存储日历信息,无需指定特定时间点.因此,在某些情况下,未指定的时区是有意义的.例如,http://tools.ietf.org/html/rfc5545#section-3.3.5(表单#1). (8认同)

Phi*_*ilT 7

除了接受的答案之外,您还可以将相同的strftime参数添加到DATE_FORMATSRails 哈希中,从而允许您标准化应用程序中的输出格式。

config/initializers/datetime_formats.rb

Time::DATE_FORMATS[:nozone] = '%a, %d %b %Y %H:%M:%S'
Run Code Online (Sandbox Code Playgroud)

然后在您的代码中,您可以执行以下操作:

Time.zone.now.to_s(:nozone)
Run Code Online (Sandbox Code Playgroud)

您甚至可以将其设为默认值:

Time::DATE_FORMATS[:default] = '%a, %d %b %Y %H:%M:%S'
Time.zone.now.to_s
Run Code Online (Sandbox Code Playgroud)

还有一个单独的日期哈希:

Date::DATE_FORMATS[:default] = '%a, %d %b %Y'
Run Code Online (Sandbox Code Playgroud)

此功能已存在多年,但似乎鲜为人知。