Tag: 时区

保留Rails中的时区

如果我有来自客户的”Wed, 22 Jun 2011 09:43:58 +0200″forms的时间字符串,我希望保存时区。 这很重要,因为重要的不仅是绝对的UTC时间,还有时区。 Time.zone.parse(t)会将时间转换为Time.zone正在使用的区域, Time.zone丢失源时区。 我是否必须从上面的字符串中手动提取时区,或者是否有惯用的方法来执行此操作?

你如何在Rails中定义postgres函数以及它们的范围和生命周期是什么?

我对Postgresfunction一无所知,但是最近需要使用它们(这可能表明我正在接近问题,但无论如何……) 我想定义一个这样的Postgres函数,然后我将通过我的Rails应用程序中的查询访问: CREATE FUNCTION date_in_time_zone(time_zone) RETURNS date AS ‘SELECT DATE(NOW() AT TIME ZONE time_zone);’ LANGUAGE SQL; (来自这个问题 )。 问题第1部分:如何定义此function? 我认为我会按如下方式这样做: sql = “CREATE FUNCTION date_in_time_zone(time_zone) RETURNS date AS ‘SELECT DATE(NOW() AT TIME ZONE time_zone);’ LANGUAGE SQL;” ActiveRecord::Base.connection.execute sql 它是否正确? 问题第2部分:该function的范围和寿命是多少? 一旦定义,此function持续多长时间以及管理该function的版本控制的最佳方式是什么。 如果它是在数据库而不是Rails中定义的那么我将不得不小心销毁它或更新它,如果我想改变它的工作方式。 每次加载Rails环境时,我还需要一些初始化函数的方法。 我应该在初始化应用程序时创建一次该函数,还是需要为每个Web请求创建它? 我认为前者是在数据库中定义的,但我不确定。 问题第3部分:我是否应该使用这种方法? 这只是一个坏主意吗? 我应该尝试以不同的方式解决问题吗? 我真的不知道这些function的范围或寿命是多少。

Rails – 时区转换

我正在尝试将带有外部时区字段的日期时间转换为UTC。 有人可以向我解释为什么这不起作用? time_str = ‘2016-03-01 00:00’ zone_str = ‘Pacific Time (US & Canada)’ Time.use_zone(zone_str) { Time.parse(time_str).in_time_zone(‘UTC’) } 我期待的是: ‘2016-03-01 08:00’ 我得到了什么: ‘2016-03-01 06:00’ 基本上,它忽略了我的use_zone调用,只使用我的本地时区,即Central。 我应该做什么呢? – 编辑 – 请注意,我不是要在整个应用程序中设置时区。 我只想尝试一组输入(时间和时区在不同的表单字段中)并将它们转换为UTC。

Rails中的时区怪异

这是一个非常奇怪的Rails问题 – 我已经google了一下,看看这是否与已知的bug有关,但是没有找到任何东西 – 对于有用的链接以及解决方案来说都是无用的。 我可以将问题归结为: 如果我启动我的Rails应用程序,并通过HTTP请求执行以下Rails代码。 Time.zone = ‘Europe/London’ logger.info Time.zone.inspect 日志显示为时区 # 在下一个请求(以及大多数后续请求)中,相同代码行的日志显示了这一点 #<ActiveSupport::TimeZone:0x46cc100 @tzinfo=#, @name=”Europe/London”, @utc_offset=nil> 谁知道到底发生了什么? (如果有帮助,我正在运行Rails 2.3.2) 编辑:似乎Rails 2.2.2没有这个问题,所以我现在将恢复原状。

Rails 3个用户时区

在Rails 2.x中,我没有特别设置任何时区信息,用户,无论他们在哪个时区,都会获得用户在其操作系统中指定的日期时间。 现在在Rails 3中,所有内容都以UTC格式显示。 是否有可能恢复默认的查看行为而无需添加一些js hack来检测用户的时区? 谢谢! 克里斯

发布在Heroku上validationRails应用程序的用户时区

我正在关注Ryan Bates关于为rails应用程序添加时区的教程。 http://railscasts.com/episodes/106-time-zones-revised (顺便说一下,这是一个很好的教程) 无论如何,Ryan说用Rails知道的提交时区来validation提交的时区是个好主意。 他把这个规则放到了用户的模型中: validates_inclusion_of :time_zone, in: ActiveSupport::TimeZone.zones_map(&:name) 这在开发中工作得很好。 但是,当我在Heroku上运行应用程序时,它不喜欢时区“墨尔本”(和许多其他人 – 我主要测试AU时区)。 在Heroku上,在用户模型中使用该规则,它将不接受“墨尔本”的时区。 那为什么会这样? time_zone_select视图助手返回“墨尔本” – 因此rails必须知道它。

Rails datetime_select以UTC格式发布当前时间

我正在尝试将用户为开始日期和结束日期选择的内容与当前时间进行比较,以防止用户选择过去的时间。 它的工作原理除了你需要选择一个时间,在我的情况下,提前4个小时才能通过validation。 视图: datetime_select(:start_date, ampm: true) 控制器: if self.start_date < DateTime.now || self.end_date < DateTime.now errors.add(:date, 'can not be in the past.') end self.start_date返回我当前的时间但是在utc中这是错误的。 DateTime.now返回当前时间,但偏移量为-0400,这是正确的。 例: 我现在的时间是2013-10-03 09:00:00.000000000 -04:00 self.start_date是2013-10-03 09:00:00.000000000 Z. DateTime.now是2013-10-03 09:00:00.000000000 -04:00 为什么会发生这种情况以及解决问题的最佳方法是什么?

使用设计动态设置用户时区

我已经构建了一个rails应用程序,可以帮助父母跟踪他们的婴儿的睡眠。 为了使它正常工作,我必须支持不同的时区。 为了避免使用时区烦扰用户,我创建了一个小的javascript,在登录表单中添加了一个隐藏字段,包括时区偏移量。 这是代码 var timeZoneField = $(“input[name=’user_tz_offset’]”); if (timeZoneField.length) { var browserDate = new Date(); var timeZoneOffsetSeconds = (browserDate.getTimezoneOffset() * 60) * -1; $(timeZoneField).val(timeZoneOffsetSeconds); } 使用该字段中的数据,我将Time.zone设置为与该偏移量对应的任何城市。 这样的事情会产生时区 user_time_zone = ActiveSupport::TimeZone.[](params[:user_tz_offset].to_i) session[:user_time_zone] = user_time_zone 最后,我在ApplicationController中设置了时区。 def set_user_time_zone if (session[:user_id]) Time.zone = session[:user_time_zone] else Time.zone = config.time_zone end end 所有这些都依赖于我自己编写的登录function。 但是,我知道我以后需要使用更好的用户管理系统,因为我自己的代码既没有做得好或者特别安全(我首先关注其他function)。 现在,我已经安装了设计,它可以很好地登录和注销,该网站的大多数其他function也可以工作。 但我不知道如何使用设计作为我的用户管理系统来处理时区支持。 一个想法是覆盖Devise中的SessionsController,添加对该隐藏时区字段的检查并将其值添加到user_session。 但我对这样做感到担心,感觉这是一个坏主意。 是否有更好的方法来添加此function,而无需强制用户在注册期间添加时区信息? […]

NoMethodError:nil的未定义方法’type’:Rails中的NilClass

尝试加载使用Rails构建的网站上的其中一个页面时获取NoMethodError。 请参阅下面的完整堆栈跟踪。 如果我在production.rb中将false更改为true config.cache_classes = false 然后问题消失了,但每次我对任何文件进行更改时,我都必须重新启动Rails服务器。 似乎问题与检查数据库中列的类型有关,但我无法弄清楚如何解决它。 控制器动作: def manage @view_data = {} if (@view_data[:product] = Product.find(params[:id])).nil? raise ActionController::RoutingError.new(‘Not Found’) end @view_data[:backlog] = Task.where(“product_id = ? AND status < ?", params[:id], Task::STATUS_COMPLETED) .page(params[:page]).per(10) @view_data[:completed] = Task.where(product_id: params[:id], status: Task::STATUS_COMPLETED) .page(params[:page]).per(10) end ‘tasks’表上有四列是datetime类型的 – 我认为这些列导致了问题,但我不完全确定。 完整堆栈跟踪: NoMethodError – undefined method `type’ for nil:NilClass: activerecord (3.2.13) […]

Ruby on Rails和Active Record独立脚本在数据库值上不同意:timestamps

我今天早些时候发布了一个问题,当时我还没有对这个问题进行过调整。 我会在这里更简洁。 我在Windows上使用MySQL运行RoR 2.1.2。 SQL Server的本机时区是UTC。 我当地的时区是太平洋(-0800) 我有一个带有:timestamp类型列的模型,我可以使用以下方法执行以下操作: record = Record.find(:first) record.the_time = Time.now() 当我在数据库中执行“select * from records”时,显示的时间是我当地时间提前8小时,这是正确的,因为数据库是在UTC上。 (我已经通过简单的’select now()’和’select utc_timestamp()’来validation它是’在utc中思考’) 这就是麻烦开始的地方。 如果我在视图中显示时间: …然后我回到正确的时间,以UTC格式显示。 如果我在当地时间16:40:00写入数据库,则数据库显示00:40:00。 但是,如果我运行的是独立脚本: record = Record.find(:first) puts record.the_time …然后我回到我存储在数据库中的UTC时间(00:40:00),但是使用本地时区: Wed Nov 26 00:40:00 (-0800) 2008 ……八小时的时间扭曲 为什么存储时间会正确地转换它,但检索它不是吗? 如果我比较数据库中最近过去的存储时间并将其与当前时间进行比较,则当前时间较少 – 告诉我这不仅仅是字符串转换问题。 有任何想法吗?