如何从DateTime值中删除区域?

时间:2012-02-03 16:54:41

标签: ruby

我有这个DateTime:

=> Fri, 03 Feb 2012 11:52:42 -0500

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

=> Fri, 03 Feb 2012 11:52:42

4 个答案:

答案 0 :(得分:29)

时间总是有一个区域(没有一个没有意义)。您可以选择在使用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

有关用于构建特定格式的奥术代码,请参阅Time#strftime

或者,您可能希望convert your DateTime to UTC获得更一般的陈述。

答案 1 :(得分:2)

除了接受的答案,您还可以将相同的strftime参数添加到DATE_FORMATS Rails哈希,以便您在应用程序中标准化输出格式。

config/initializers/datetime_formats.rb

Time::DATE_FORMATS[:nozone] = '%a, %d %b %Y %H:%M:%S'

然后在你的代码中你可以这样做:

Time.zone.now.to_s(:nozone)

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

Time::DATE_FORMATS[:default] = '%a, %d %b %Y %H:%M:%S'
Time.zone.now.to_s

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

Date::DATE_FORMATS[:default] = '%a, %d %b %Y'

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

答案 2 :(得分:1)

当其他所有方法都失败时

zoned_time = Time.now
unzoned_time = Time.new(zoned_time.year, zoned_time.month, zoned_time.day, zoned_time.hour, zoned_time.min, zoned_time.sec, "+00:00")

答案 3 :(得分:0)

有点晚了,但我偶然发现了这篇文章。 PhilT 有一个很好的答案,但这里有一个替代方案。使用 Rails,您可以将其放入您的语言环境文件中。这是指定各种格式的示例。

  time:
    formats:
      default: "%a, %d %b %Y %H:%M:%S %z"
      no_timezone: "%a, %d %b %Y %H:%M:%S"
      long: "%B %d, %Y %H:%M"
      short: "%d %b %H:%M"
      time_only: "%I:%M%p"
      military_time: "%H:%M"

然后在您的代码中,使用 I18n.l(DateTime.now, format: :no_timezone)。您也可以类似地设置默认格式以排除时区。