Tag: timezone

Rails 3.1:在一个时间范围内查询Postgres的记录

在我的应用程序中,我有一个Person模型。 每个Person都有一个属性time_zone ,用于指定其默认时区。 我也有一个Event模型。 每个Event都有一个start_time和end_time时间戳,以UTC时间保存在Postgres数据库中。 我需要创建一个查询,查找特定人员在一天的午夜和下一个午夜之间的事件。 @todays_events控制器变量保存查询结果。 我采用这种方法的部分原因是我可能让其他时区的人查看一个人的事件列表。 我希望他们看到这一天,因为这个人会看到这一天,而不是基于他们作为观察者所在的时区。 无论出于何种原因,我仍然在前一天的@todays_events.结果集中收到一些事件@todays_events. 我的猜测是我将UTC时间戳与非UTC参数进行比较,或者沿着那些线进行比较。 通常,只有在前一天晚上开始或结束的事件才会显示在今天的查询结果列表中。 现在,我正在建立: @today = Time.now.in_time_zone(@person.time_zone).midnight.to_date @tomorrow = (@today + 1.day ).to_datetime @today = @today.to_datetime 我的查询看起来像: @todays_activities = @person.marks.where(“(start_time >= ? AND start_time = ? AND end_time < ?);", @today, @tomorrow, @today, @tomorrow ).order("start_time DESC") 我应该如何改变这一点,以便我保证只收到今天的结果(根据@todays_activities查询中的@person.time_zone @todays_activities ?

Rails更改默认时区

我正在尝试将Rails 3.2.8 app中的默认时区更改为GMT + 04:00,但我不知道该怎么做。 以下解决方案对我不起作用: config.time_zone = ‘Moscow’ config.time_zone = “(GMT+04:00) Moscow” config.active_record.default_timezone = ‘Moscow’ config.active_record.default_timezone = :local 此外,我在rails控制台中尝试了以下内容:ActiveSupport :: TimeZone.all.map(&:name),它返回了一个值列表,包括”Moscow” 。 Time.zone返回(GMT+00:00) UTC Time.zone不正确,应该是(GMT+04:00) UTC 。 然后我更改了Time.zone = “Moscow” , Time.now返回了正确的值(… +0400)。 所以为了修复它,我只使用了Time.now + 4.hour ,但我还需要datetime_select来显示我当地的时间。 Time.now + 4.hour不是正确的解决方案。 请分享任何可以将默认时区设置为其本地值的想法。 先感谢您。

MySQL,Rails ActiveRecord日期分组和时区

我想按创建日期计算用户数。 当我查询我的上一个用户时,我有: > User.last.created_at => Thu, 07 Aug 2014 21:37:55 BRT -03:00 当我计算每个日期的用户时,我得到这个: > User.group(“date(created_at)”).count => {Fri, 08 Aug 2014=>1} 创建日期是8月7日,但结果是8月8日。这是因为组条件是UTC,我的时区是’Brasilia’。 我在我的application.rb有这个: config.time_zone = ‘Brasilia’ config.active_record.default_timezone = :local 怎么解决这个?

如何从过时的TZInfo标识符中获取Rails TimeZone名称?

已经有一个问题可以解答如何将“America / Los_Angeles”转换为“太平洋时间(美国和加拿大)”。 但是我想将“US / Pacific”和其他过时的时区转换为Rails TimeZone。 我无法在图书馆找到任何可以帮助我完成此任务的内容。

rails //在白天按时区查询

在使用时区时,并没有那么自信,在这个问题上寻求帮助 我有一个cron作业,偶尔检查用户,这称为rake任务。 在此rake任务中,我查询用户并根据条件发送每个电子邮件。 我有每个用户的时区信息。 我想对那些只返回当前白天用户的用户进行查询 如何实现这一目标? 最好

Ruby / Rails中的夏令时开始和结束日期

我正在开发一个Rails应用程序,我需要在给定特定偏移量或时区的情况下找到夏令时开始和结束日期。 我基本上在我的数据库中保存从用户的浏览器( “+3” , “-5” )收到的时区偏移量,我想在夏令时改变时修改它。 我知道Time实例变量有dst? 和isdst方法,如果存储在它们中的日期是夏令时,则返回true或false。 > Time.new.isdst => true 但是使用它来查找夏令时开始和结束日期会占用太多资源,而且我还必须为每个时区偏移执行此操作。 我想知道更好的方法。

我可以覆盖Ruby中的系统时区吗?

我在Ubuntu 12.04上 ,我可以看到: $ cat /etc/timezone America/Phoenix 因此, Time将返回非UTC区域的时间: $ irb > Time.now => 2013-03-27 13:44:49 -0700 > Time.at 0 => 1969-12-31 17:00:00 -0700 我可以使用TZ环境变量覆盖系统时区: $ TZ=UTC irb > Time.now => 2013-03-27 20:47:19 +0000 > Time.at 0 => 1970-01-01 00:00:00 +0000 无论如何,我可以在Ruby进程中以编程方式进行此更改吗?

为什么在delayed_job中关闭时区?

在我的Rails应用程序中,当我使用delayed_job gem创建后台作业时,我将所有时间偏移6小时。 我的理解是delayed_job使用你的时区 ,但它就像是使用了错误的时区 。 而不是距离UTC 6小时( CST是我的时区),这是-12小时! 这里有一些视图代码来说明。 注意: Time.now给出2014-03-04 23:26:55 -0600 Time.now.utc给出2014-03-05 05:26:55 UTC 但delayed_job几秒前的想法是2014-03-04 17:26:53 -0600 我的看法: #delayed_jobs/index.html.erb All Background Jobs The time now is: The time UTC is: ID Queue Created At Run At 输出: 我可以通过以下三种方式创建作业,并获得相同的created_at时间: MyClass.delay.foo MyClass.delay(run_at: 0.minutes.from_now).foo MyClass.delay(run_at: 0.minutes.from_now.getutc).foo 我的配置有: #config/application.rb config.time_zone = ‘Central Time (US & Canada)’ config.active_record.default_timezone […]

将时间转换为其他时区

我有这种格式的日期字符串yyyy-mm-ddThh:mm:ss [Z] 我有一个时区字符串。 例如“Asia / Kolkata” 现在我想将此日期字符串转换为给定时区的时区 例如,如果日期是2014-01-03T23:30:00Z,那么在“Asia / Kolkata”时区它将是2014-01-04T05:00:00。 我尝试使用时间库,但时间库似乎没有任何方法可以转换为其他时区http://ruby-doc.org/core-1.8.6/Time.html#method-c-mktime 。

如何在Ruby中更改DateTime的时区?

在保持时区不变的同时读取,写入和序列化日期和时间变得令人讨厌。 我正在使用Ruby(和Rails 3.0)并试图改变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 有没有更好的方法?