比较来自世界各地的卖家的域名和 IT 服务价格

如何改变 timezone 的 DateTime 在 Ruby?

节日日期和时间的阅读,写作和序列化变得令人讨厌。 我用 Ruby /和 Rails 3.0/ 并试图改变时区 a DateTime. /在 UTC/, 但不是时候本身。

我要这个:


t = DateTime.now
t.hour
-> 4
t.offset = 0
t.hour
-> 4
t.utc?
-> true


我走得更近我走近这个,但这并不直观。


t = DateTime.now
t.hour
-> 4
t += t.offset
t = t.utc
t.hour
-> 4
t.utc?
-> true


有没有更好的办法?
已邀请:

奔跑吧少年

赞同来自:

使用 Rails 3, 你正在寻找 DateTime.change//


dt = DateTime.now
=> Mon, 20 Dec 2010 18:59:43 +0100
dt = dt.change/:offset => "+0000"/
=> Mon, 20 Dec 2010 18:59:43 +0000

小明明

赞同来自:

d = DateTime.now
puts [ d, d.zone ]
#=> 2010-12-17T13:28:29-07:00
#=> -07:00

d2 = d.new_offset/3.0/24/
puts d2, d2.zone
#=> 2010-12-17T23:28:29+03:00
#=> +03:00


Edit

: 此答案不会考虑评论对另一个答案提供的信息,即愿望是报告 'hours' 改变时区后它是一样的。

郭文康

赞同来自:

例如,使用数字的位移 "+1000", 由于到夏季时间的过渡,它不会全年工作。 查看 ActiveSupport::TimeZone.
https://coderoad.ru/2695837/

涵秋

赞同来自:

相反,我会使用该对象
http://ruby-doc.org/core/classes/Time.html
. 所以,获得当前的当地时间,然后在班次上增加它 UTC 并转换B. UTC, 像这样:


t = Time.now # or Time.parse/myDateTime.asctime/
t # => Thu Dec 16 21:07:48 -0800 2010
/t + t.utc_offset/.utc # => Thu Dec 16 21:07:48 UTC 2010


虽然,根据评论 Phrogz, 如果您只想存储临时标记,无论位置如何,那么只需使用当前时间 UTC:


Time.now.utc

奔跑吧少年

赞同来自:

如何

指示 @Sam, 位移的变化是不够的,并且会导致错误。 抵抗时钟改善 DST, 转换必须如下进行:


d = datetime_to_alter_time_zone
time_zone = 'Alaska'

DateTime.new
.in_time_zone/time_zone/
.change/year: d.year, month: d.month, day: d.day, hour: d.hour, min: d.min, sec: d.sec/

二哥

赞同来自:

如果有人有 /例如,我有/ 有

例如,所有时间都是字符串格式 "Pacific Time /US & Canada/ "

我发现的最佳方式是什么:


datetime.change/ActiveSupport::TimeZone[time_zone_string].formatted_offset/false//

八刀丁二

赞同来自:

您可以通过将以下字符串添加到配置文件来指定要在应用程序中使用的时区 /config/application.rb/:
config.time_zone = 'Mumbai'

可以在此处找到关于此问题的官方文档:
http://api.rubyonrails.org/cla ... .html
另一种选择是你 "Monkey Patch" 班级 'DateTime'.

要回复问题请先登录注册