Rails:将 UTC 日期时间转换为另一个时区

发布于 2024-08-29 22:39:47 字数 43 浏览 2 评论 0原文

在 Ruby/Rails 中,如何将 UTC 日期时间转换为另一个时区?

In Ruby/Rails, how do I convert a UTC DateTime to another time zone?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

感情废物 2024-09-05 22:39:47
time.in_time_zone(time_zone)

示例:

zone = ActiveSupport::TimeZone.new("Central Time (US & Canada)")
Time.now.in_time_zone(zone)

或者

Time.now.in_time_zone("Central Time (US & Canada)")

您可以通过执行以下操作找到 ActiveSupport 时区的名称:

ActiveSupport::TimeZone.all.map(&:name)
# or for just US
ActiveSupport::TimeZone.us_zones.map(&:name)
time.in_time_zone(time_zone)

Example:

zone = ActiveSupport::TimeZone.new("Central Time (US & Canada)")
Time.now.in_time_zone(zone)

or just

Time.now.in_time_zone("Central Time (US & Canada)")

You can find the names of the ActiveSupport time zones by doing:

ActiveSupport::TimeZone.all.map(&:name)
# or for just US
ActiveSupport::TimeZone.us_zones.map(&:name)
救赎№ 2024-09-05 22:39:47

如果 Time.zone 是您想要的时区,那么您可以使用 @date.to_time.to_datetime

> @date
=> Tue, 02 Sep 2014 23:59:59 +0000
> @date.class
=> DateTime
> @date.to_time
=> 2014-09-02 12:59:59 -1100
> @date.to_time.to_datetime
=> Tue, 02 Sep 2014 12:59:59 -1100 

if Time.zone it's your desired time zone then you can use @date.to_time.to_datetime

> @date
=> Tue, 02 Sep 2014 23:59:59 +0000
> @date.class
=> DateTime
> @date.to_time
=> 2014-09-02 12:59:59 -1100
> @date.to_time.to_datetime
=> Tue, 02 Sep 2014 12:59:59 -1100 
活泼老夫 2024-09-05 22:39:47

在普通 ruby​​ 中,仅 require 'date',使用 new_offset 方法:

require 'date'

d=DateTime.parse('2000-01-01 12:00 +0200')
l=d.new_offset('-0700')
u=l.new_offset('UTC')
puts "#{u.strftime('%a %F %T %Z')} ❖ #{l.strftime('%a %F %T %Z')}"

使用 Mac OS X 10.13 上的标准 ruby​​ 2.3.7 进行测试。

In plain ruby, with only require 'date', use the new_offset method:

require 'date'

d=DateTime.parse('2000-01-01 12:00 +0200')
l=d.new_offset('-0700')
u=l.new_offset('UTC')
puts "#{u.strftime('%a %F %T %Z')} ❖ #{l.strftime('%a %F %T %Z')}"

Tested with ruby 2.3.7 that came standard on Mac OS X 10.13.

妞丶爷亲个 2024-09-05 22:39:47

尝试使用 TimeZone 操作 ActiveSupport 的 TimeWithZone 对象。 ActiveSupport 还提供 in_time_zone 方法,用于将 UTC 时间转换为指定的 TimeZone 时区。麦基德的答案显示了代码。

Try ActiveSupport's TimeWithZone objects manipulated with TimeZone. ActiveSupport also provides the in_time_zone method for converting a UTC time to a specified TimeZone time zone. mckeed's answer shows the code.

疏忽 2024-09-05 22:39:47

以防万一,如果您正在处理 Rails 中的 ActiveRecord 对象。

使用 Time.use_zone 作为每个请求的基础时区可能是一个好主意,它会覆盖 config.time_zone 中设置的默认时区

我在 https://stackoverflow.com/a/25055692/542995

Just in case, if you are dealing with ActiveRecord object in Rails.

It might be a good idea to use Time.use_zone for a per request basis timezone that overrides the default timezone set in config.time_zone

More details I explain at https://stackoverflow.com/a/25055692/542995

ゞ记忆︶ㄣ 2024-09-05 22:39:47

我在 Rails 4 中使用 simple_form ,我刚刚添加了输入字段,就像

<%= f.input :time_zone, :as => :time_zone %>

迁移一样

class AddTimeZoneColumnToTextmessage < ActiveRecord::Migration
  def change
    add_column :textmessages, :time_zone, :string
  end
end

I'm using simple_form in Rails 4 and I just added the input field as

<%= f.input :time_zone, :as => :time_zone %>

with the migration

class AddTimeZoneColumnToTextmessage < ActiveRecord::Migration
  def change
    add_column :textmessages, :time_zone, :string
  end
end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文