【问题标题】:How do I.. get a value for time at 9:00am local, regardless of the timezone?无论时区如何,我如何..获取当地时间上午 9:00 的时间值?
【发布时间】:2010-04-08 02:23:06
【问题描述】:

在我的应用程序中,我需要将一个变量设置为当地时间上午 9:00,无论用户位于何处。

我为每个用户设置了一个时区变量,并且保存和检索都正常工作。但是当我在用户本地时区的上午 9:00 创建一个新事件时,我需要设置一个变量。

我目前的方法是使用服务器的本地时间,然后针对个人用户的时区进行调整。我不知道我不知道什么 - 是否有命令为“今天上午 9:00 你所在的日期”创建值?

我当前的代码是:

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

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

【问题讨论】:

    标签: ruby-on-rails time timezone local


    【解决方案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))
    

    因此,美国东部标准时间/美国东部时间上午 9:00 的当地时间表示为 05:00 UTC。

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

    【讨论】:

      【解决方案2】:

      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
      

      【讨论】:

      • 这个方法有效。谢谢。我最终得到: t = Time.parse("09:00") start_time = Time.now.beginning_of_day + t.hour.hours
      猜你喜欢
      • 2011-12-19
      • 2013-04-05
      • 1970-01-01
      • 1970-01-01
      • 2016-07-16
      • 1970-01-01
      • 2012-02-27
      • 2015-09-09
      • 1970-01-01
      相关资源
      最近更新 更多