Tag: dst

rails’utc_to_local和夏令时

> e = Event.first > e.registration_start_utc #registration_start_utc is a datetime column => Sat, 23 Oct 2010 06:38:00 UTC +00:00 > e.registration_start_utc.utc? => true > ActiveSupport::TimeZone.find_tzinfo(“America/New_York”).utc_to_local(e.registration_start_utc) => Sat, 23 Oct 2010 02:38:00 UTC +00:00 关于这个的2个问题: 1)为什么最后一个输出显示“UTC” – 小时被转换(6 => 2)但它仍然表示UTC。 为什么不EST / EDT? 2)夏令时转换后纽约的偏移量从-4变为-5后会发生什么? 数据库中的值没有变化所以我唯一的结论是我的应用程序将开始显示“1:38”到处而不是正确的2:38? 我最关心的是#2。 #1更像是一种好奇心。 谢谢!

为什么这个rails查询的行为取决于时区?

我有一个基于时间的rails查询,它有一些奇怪的时区敏感行为,即使据我所知我使用的是UTC。 简而言之,这些查询给出了不同的答案: >> Model.find(:all,:conditions=>[‘created_at 279 >> Model.find(:all,:conditions=>[‘created_at 280 DB实际上包含在过去一小时内创建的一个模型,并且模型总数为280.因此只有第一个查询是正确的。 但是,在environment.rb中,我有: config.time_zone = ‘UTC’ 系统时区(由“日期”报告)是BST(GMT + 1) – 因此不知何故,这会被视为UTC并打破查询。 这引起了我各种各样的问题,因为我需要将在不同时间传递的查询参数化为一个动作(然后使用Time.parse()进行转换),即使我以UTC时间发送,这个’关闭一小时’DST问题很多。 即使使用’.gmtime()’也似乎并不总能修复它。 显然,这种差异是由某个地方的隐式转换造成的,导致BST被错误地视为UTC,但为什么呢? rails是否以UTC格式存储时间戳? Time class timezone不是很清楚吗? 我正在使用Rails 2.2.2 那么这里发生了什么 – 围绕它编程的安全方法是什么? 编辑,一些额外的信息来显示DB和Time类正在做什么: >> Model.find(:last).created_at => Tue, 11 Aug 2009 20:31:07 UTC +00:00 >> Time.now => Tue Aug 11 22:00:18 +0100 2009 >> Time.now.gmtime => Tue Aug […]

Ruby – 获得下一个夏令时的变化

我知道有一种方法可以确定某一时间是否在夏令时( Time.now.dst? )上,但是有一种方法可以为我们提供夏令时改变时的下一个日期吗? 例如,Google Sunday, November 1作为2015年下一个夏令时更改。

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

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

在显示日期时,使Rails忽略夏令时

我在我的Rails应用程序中有一个以UTC格式存储的日期,并且我正在尝试将其显示给以”Eastern Time (US & Canada)”作为其时区的用户。 问题是导轨不断将其转换为东部夏令时(EDT),因此午夜显示为早上8点 ,应该是早上7点 。 反正有没有阻止DST转换? >> time = DateTime.parse(“2013-08-26T00:00:00Z”) => Mon, 26 Aug 2013 00:00:00 +0000 >> time.in_time_zone(“Eastern Time (US & Canada)”) => Sun, 25 Aug 2013 20:00:00 EDT -04:00 更新 我最终对@zeantsoi的方法进行了改进。 我不是添加太多rails帮助器的忠实粉丝所以我扩展了活动支持的TimeWithZone类。 class ActiveSupport::TimeWithZone def no_dst if self.dst? self – 1.hour else self end end end 现在我可以做time.in_time_zone(“Eastern Time (US & […]

在选择预定项目时,在Postgres中计算DST

我有一个Postgres 时钟闹钟表(不是真的,但这是类似的,更容易解释)。 用户以1小时的分辨率设置警报,用户可以来自许多不同的时区。 警报每天重复。 我想要可靠地获取应该在一天中的特定时刻发生的警报,并且我遇到了夏令时问题 。 我该如何以最好的方式做到这一点? 例 阿尔弗雷德和洛塔都住在斯德哥尔摩(从UTC开始+1小时,但是在夏令时+ 2小时)。 Sharon住在新加坡(距离UTC +8小时,没有夏令时) 在冬季,阿尔弗雷德在凌晨4点发出警报。 警报应该在当地时间凌晨4点全年开始。 夏季,洛塔在凌晨5点发出警报。 它应该全年都在凌晨5点出发。 与此同时,沙龙已经在上午11点发出警报。 所有这些都可以03:00 UTC的forms存储在数据库中。 如果我在冬天查询数据库以获取应在03:00 UTC发出的警报,我想要Alfred和Sharon的警报。 新加坡现在离瑞典只有7小时,所以新加坡上午11点在瑞典凌晨4点。 洛塔的警报不应再持续一小时。 相反,如果我在夏天查询数据库以获取应在03:00 UTC发出的警报,我想要Lotta和Sharon的警报。 新加坡现在离瑞典只有6小时,所以新加坡上午11点在瑞典上午5点。 斯文的闹钟在一小时前响起。 如何存储,查询数据库? 如有必要,我可以更改数据库架构。 目前,我们根本没有调整DST,事实上只有一个“小时”整数字段(看起来很愚蠢,时间字段会更好)。 我似乎需要存储UTC时间和时区信息,但我不知道如何在Postgres中最好地实现这一点。 我发现Postgres有一些时区概念,但据我所知,没有时区字段类型。 另外,我想我需要在SQL中进行一些计算,以确定如何根据时区数据和创建日期来偏移select中的UTC时间。 我对SQL不太满意…… 我确实想在Postgres中解决这个问题,因为可能存在很多“警报”,我想避免将所有这些问题都引入Ruby并在那里过滤所带来的性能问题。 (是的,这是一个Rails应用程序。)