我尝试使用Mongoid将日期时间保存到MongoDB中的事件中。困难在于我想将它们保存在不同的时区(例如柏林和伦敦)。我希望用户(admin)查看时区中的实际时间,以便他不需要计算。之后我随时都有一个cron作业,它看起来每分钟处理一个事件。
我有以下参数:
application.rb(我试过没有 - >标准UTC - >伦敦没问题,柏林错误时间)
config.time_zone = 'Berlin' # as the server stays in Germany
mongoid.yml(尝试了所有组合,但需要use_activesupport_time_zone来获取int oDB的正确时间)
use_activesupport_time_zone: true
use_utc: false
schedule.rb(到目前为止没问题)
every 1.minutes do
runner "Event.activate_due", environment: 'development'
end
event.rb(不确定我现在在哪看)
def self.activate_due
events_due = Event.where(:eventStart.lte => (Time.now + 1.minute), :eventStart.gte => (Time.now))
events_due.each do |e|
e.activate
end
end
我尝试更改事件#new中的Time.zone,以便在simple_form中描述时区的实际时间。它似乎工作,但然后控制器创建方法似乎再次将params视为标准时区并错误地转换它(在试验伦敦/柏林时+ -1小时)。我尝试了几乎所有参数组合以及Time.now/Time.zone.now。 在事件#index中,我切换time_zones以显示正确的时间。
稍微复杂一点:我在区域模型中保存时区,区域模型通过areaId与事件模型连接。
我如何在表格中向管理员显示他想要添加的区域(而不是他的时区)中的事件的正确时间,并将其正确保存在Mongo中,以便稍后通过cronjob触发它?
答案 0 :(得分:1)
尝试以下
def self.activate_due
events_due = Event.where(
:eventStart.to_utc.lte =>(Time.now.to_utc),
:eventStart.to_utc.gte => (1.minute.ago.to_utc))
events_due.each do |e|
e.activate
end
end
Plesse请注意,这将与UTC时间一起使用,因此如果您有一个UTC事件 - 7时区,如果服务器时区是UTC + 2,则认为它不会被激活