我目前有单独的game_date和game_time字段,由于时区问题,我很难将我的DateTime.now与连接在一起的DateTime进行比较。我是否应该将我的数据库重新设计为只使用DateTime?我有一个单独的时间字段,因为在某些时间点上时间可以是空的。典型的做法是什么?另外,我应该如何解决以下时区的问题?
now = DateTime.now
@upcoming_games = []
@past_games = []
games.each do |game|
game.game_time = DateTime.now if game.game_time.nil?
dt = DateTime.parse("#{game.game_date}T#{game.game_time.strftime("%H:%M:00")}")
if dt >= now
@upcoming_games << game
else
@past_games << game
end
end发布于 2012-02-04 13:13:24
一般的想法是使用DateTime作为时间的通用表示。您可能会感到困惑的是,Time还包括一个date组件,因为它是UNIX time_t中自纪元以来的秒数概念的封装,在MySQL术语中是UNIX_TIME()。
由于I explain in another answer,时间是比DateTime更有限的表示形式,并且只能表示到2038年1月18日为止的日期和时间。DateTime可以代表公元前4,712年以及未来的21,000年。
如果您想要一个单独的字段来表示一天中的时间,那么您应该创建一个单独的数值字段来表示午夜过后的秒数(如果需要这种精度的话),或者创建一个更方便的"HHMM“表示,它本身不关心base-60和base-10之间的差异。
另一种选择是有两个字段,一个是DateTime,另一个是日期。如果要创建没有特定时间的日历条目,请仅填充日期字段。如果有时间,则同时填充这两个参数。
请记住,日期字段是用文字日期填充的,与时区无关,因此如果它不是用用户的本地时间表示的,这可能会带来麻烦。如果需要,DateTime始终可以转换为用户的本地时间。
https://stackoverflow.com/questions/9138515
复制相似问题