【发布时间】:2013-11-27 23:15:29
【问题描述】:
所以...我正在尝试在地图上创建东西。有一个日期和时间与该事物相关联,但它目前正在以 1:1 的比例保存。所以,如果我保存一些东西并给它一个日期2013-11-28 @ 12:00 pm,它会以那个特定的时间保存到数据库中。它应该保存 UTC...所以2013-11-28 @ 18:00 pm 在我的情况下。
我有一个用于时区的 around_filter...
class ApplicationController < ActionController::Base
around_filter :user_time_zone, if: :current_user
private
def user_time_zone(&block)
Time.use_zone(current_user.location, &block)
end
end
所以,一旦东西被保存...它是正确的时区,并显示为2013-11-28 @ 04:00 am。
我想在设置时间时使用 Time.use_zone 函数,但这也不起作用。我正在使用谷歌来获取地图上事物所在的时区...
JSON.load(open("https://maps.googleapis.com/maps/api/timezone/json?location=#{params[:lat]},#{params[:lng]}×tamp=1331161200&sensor=false"))["timeZoneId"]
为我提供了正确的时区...但我似乎无法在保存期间应用它。可能跟型号有关?我有单独的日期和时间字段......我将它们组合在模型中:
before_create :convert_to_start
# Start
def startDate
start.strftime("%d/%m/%Y") if start.present?
end
def startDate=(date)
# Change back to datetime friendly format
@startDate = Date.parse(date).strftime("%Y-%m-%d")
end
def startTime
start.strftime("%I:%M%p") if start.present?
end
def startTime=(time)
# Change back to datetime friendly format
@startTime = Time.parse(time).strftime("%H:%M:%S")
end
def convert_to_start
self.start = DateTime.parse("#{@startDate} #{@startTime}")
end
我想我需要将从谷歌获得的时区传递给模型中的那些方法,但我似乎无法弄清楚如何与它们交互。
【问题讨论】:
-
Chronic gem 是答案...我试图坚持使用原生 Rails 的东西,但 Chronic 实在是太棒了。
Chronic.time_class = ActiveSupport::TimeZone.create(#timezone fetched by google),然后在模型中,所有这些解析都更改为Chronic.parse。他们都...
标签: ruby-on-rails activerecord google-maps-api-3 timezone