在我的应用中,我需要将开始时间的变量设置为本地上午9点,无论用户位于何处。
每个用户都有一个时区变量,保存和检索都可以正常工作。但是当我在用户的本地时区创建一个新事件时,我需要设置一个变量。
我当前的方法使用服务器的本地时间,然后对单个用户的时区进行调整。我不知道我不知道的是 - 是否有命令为“今天上午9:00你在哪里”创造价值?
我目前的代码是:
t = Time.now.to_date.beginning_of_day + 11.hours
(强制我的主要用户和服务器在不同时区之间的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.hour
和t.min
获取此时间组件,并使用正确的日期/时间和用户时区的调整构建Date
对象。
>> t = Time.parse("09:00")
=> 2010-04-07 09:00:00 -0700
>> t.hour
=> 9
>> t.min
=> 0