我想在整个应用程序中使用EST。我已经设置了
config.time_zone = 'Eastern Time (US & Canada)'
config.active_record.default_timezone = 'Eastern Time (US & Canada)'
我想要的是,我需要得到所有我用过的时间比如"DateTime.now"
它现在返回的时间是我的本地时区但我想要它返回的日期时间是EST,我还有日期时间范围选择器我得到开始日期和结束日期并使用
(params[:start_date]).to_time
它还返回本地区域的日期时间,而不是我希望所有这些都在EST中返回。我怎么能做到这一点?如有任何帮助,不胜感激。
DateTime.now
和Time.now
不尊重Time.zone
,总是使用服务器时间。如果您正在使用的机器被设置为不同的时区,这两个将使用该时区。
to_time
默认为apidock中提到的本地时区(尽管刚刚尝试过,我默认得到utc)。要在时区集中获得这些时间,请附加in_time_zone
DateTime.now.in_time_zone
Time.now.in_time_zone
string.to_time.in_time_zone
有一些快捷方式。下面的代码将返回当前时区
中的时间戳Time.zone.now
Time.zone.parse(string)
通常情况下,在数据库日期时间将保存在UTC格式,除非你已经选择了一个特定的时区活动记录,它会更容易,如果你必须干预多个时区。但是,当您访问这些值时,您将获得所选TimeZone中的值。
config.time_zone = 'Eastern Time (US & Canada)
现在,假设你有一个UTC格式的datetime值作为
datetime1 = "2014-08-25 10:25:57 +0000"
您可以将其转换为选定的时区'Eastern Time (US & Canada)'
,如下所示,
Time.zone.parse(datetime1) => Mon, 25 Aug 2014 06:25:57 EDT -04:00
然后,如果你需要一个合适的格式,使用strftime
方法。
Time.zone.parse("2014-08-25 10:25:57 +0000").strftime("%d-%m-%Y %H:%M:%S") => "25-08-2014 06:25:57"
希望能有所帮助:)