【发布时间】:2013-03-15 15:32:21
【问题描述】:
我真的很喜欢这个。 基本上我想导入一个 Excel 文件。所以我最终使用了从 Rails 导入的 CSV。
CSV.open('[path-to-file]', 'r').each do |row|
实际上,导入工作正常,但除其他外,Excel/CSV 文件中有一个日期列,数据库中有一个日期时间列。我在 CSV.open-Method 中做了以下操作:
date = DateTime.strptime(row[0], "%Y-%m-%d").strftime("%Y-%m-%d")
start_datetime = DateTime.parse(date + " 6:30:00").utc
Event.create(:event_start => start_datetime)
这会在数据库中创建具有正确日期时间的正确事件。看起来像:
2008-11-18 09:30:00
我的问题:
如果我选择在 application.rb 中注释该行
config.time_zone = 'Berlin'
Rails 使用 UTC 来显示我的事件,一切看起来都像数据库的内容。
如果我选择取消注释 config.time_zone 部分(我必须这样做),Rails 应该增加 1 小时(柏林:UTC/GMT +1 小时)。实际上它确实增加了至少 1 小时,但有时增加了 2 小时。没有连接(对我来说),在这种情况下 Rails 选择增加 1 或 2 小时。
如果我在普通 Websurface 上(在浏览器中)创建一个事件,一切正常(减去 1 小时以将 UTC 保存在数据库中,并增加 1 小时以显示在正确的时区)。
如果您对我有一些提示,我将如何尝试本地化这个问题,这将非常有帮助。
我的系统:Ruby 1.9.3p194 上的 Rails 3.2.3,Suse Enterprise 上的 MySQL
示例:
CSV:
2012-01-08
2012-02-09
2012-03-10
2012-04-11
2012-05-12
2012-06-13
2012-07-14
2012-08-15
2012-09-16
2012-10-17
2012-11-18
2012-12-19
数据库(MySQL):
| id | event_start
+----+---------------------
| 1 | 2012-01-08 06:30:00
| 2 | 2012-02-09 06:30:00
| 3 | 2012-03-10 06:30:00
| 4 | 2012-04-11 06:30:00
| 5 | 2012-05-12 06:30:00
| 6 | 2012-06-13 06:30:00
| 7 | 2012-07-14 06:30:00
| 8 | 2012-08-15 06:30:00
| 9 | 2012-09-16 06:30:00
| 10 | 2012-10-17 06:30:00
| 11 | 2012-11-18 06:30:00
| 12 | 2012-12-19 06:30:00
查看(浏览器) - 这里我只使用了一个 .order("event_start ASC")
events.each do |ev|
ev.event_start
2012-12-19 07:30:00 +0100
2012-11-18 07:30:00 +0100
2012-10-17 08:30:00 +0200
2012-09-16 08:30:00 +0200
2012-08-15 08:30:00 +0200
2012-07-14 08:30:00 +0200
2012-06-13 08:30:00 +0200
2012-05-12 08:30:00 +0200
2012-14-11 08:30:00 +0200
2012-03-10 07:30:00 +0100
2012-02-09 07:30:00 +0100
2012-01-08 07:30:00 +0100
【问题讨论】:
-
请注意浏览器中的以下两个日期:
2012-07-14和2012-14-11。第一个在最后一个字段中显示 14(建议这是天列)。然而,后一个日期在第二列中显示 14(表明那是日期列。)这当然是矛盾的。 -
我也注意到了这一点。估计是打错了,应该是04-11(从记录顺序来看)。
标签: mysql ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.2