我如何...在当地时间上午9:00获取时间值,无论时区如何?

时间:2010-04-08 02:23:07

标签: ruby-on-rails time timezone local

在我的应用中,我需要将开始时间的变量设置为本地上午9点,无论用户位于何处。

每个用户都有一个时区变量,保存和检索都可以正常工作。但是当我在用户的本地时区创建一个新事件时,我需要设置一个变量。

我当前的方法使用服务器的本地时间,然后对单个用户的时区进行调整。我不知道我不知道的是 - 是否有命令为“今天上午9:00你在哪里”创造价值?

我目前的代码是:

t = Time.now.to_date.beginning_of_day + 11.hours

(强制我的主要用户和服务器在不同时区之间的2小时偏移。)

2 个答案:

答案 0 :(得分:1)

您是否考虑过Ruby Timezone Library (TZInfo)?它具有DST感知能力,比Rails' built-in TimeZone class更加充实。

您需要使用您对用户时区的了解。这里有一个简单的例子:

require 'tzinfo'
tz = TZInfo::Timezone.get('America/New_York')
local = tz.utc_to_local(Time.utc(2010,4,8,9,0,0))

因此,EST / EDT上午9:00的当地时间表示为05:00 UTC。

irb(main):004:0> local.hour
=> 5

答案 1 :(得分:0)

Ruby有一个时间类,它映射到大多数数据库中的时间类。在包括mysql在内的大多数数据库中,它表示为HH:mm:ss,因此忽略日期部分。

除非外部更改,否则时间应始终保持不变(09:00)。您可以使用t.hourt.min获取此时间组件,并使用正确的日期/时间和用户时区的调整构建Date对象。

>> t = Time.parse("09:00")
=> 2010-04-07 09:00:00 -0700
>> t.hour
=> 9
>> t.min
=> 0