好迷糊,迁移文件里, t.date t.datetime t.time t.timestamp 到底怎么区分?
只有日期就用 date,只有时间就用 time,timestamp 是默认生成"created_at"和"updated_at"的。 那 datetime 呢?同时要日期和时间时使用?
只使用 date 和 datetime,前者只有日期不带时刻,后者既有日期又有时刻。 datetime 如果只想要时刻,格式化显示即可。
#2 楼 @chairy11 t.timestamp 与 t.datetime 的效果相同 t.timestamps 与 t.datetime :created_at; t.datetime :updated_at 的效果相同
# Model file
class Te < ActiveRecord::Base
end
# Migration file
create_table :tes do |t|
t.date :date
t.time :time
t.datetime :datetime
t.timestamp :timestamp
# t.timestamps
t.datetime :created_at; t.datetime :updated_at # same as 't.timestamps'
end
# schema.rb
create_table "tes", force: true do |t|
t.date "date"
t.time "time"
t.datetime "datetime"
t.datetime "timestamp"
t.datetime "created_at"
t.datetime "updated_at"
end
# Rails Console
2.0.0-p247 :001 > Te.create date: Date.today, time: Time.now, datetime: DateTime.now, timestamp: DateTime.now
=> #<Te id: 1, date: "2014-09-12", time: "2014-09-12 15:46:40", datetime: "2014-09-12 07:46:40", timestamp: "2014-09-12 07:46:40", created_at: "2014-09-12 07:46:40", updated_at: "2014-09-12 07:46:40">
2.0.0-p247 :002 > Te.last
=> #<Te id: 1, date: "2014-09-12", time: "2000-01-01 07:46:40", datetime: "2014-09-12 07:46:40", timestamp: "2014-09-12 07:46:40", created_at: "2014-09-12 07:46:40", updated_at: "2014-09-12 07:46:40">
PS: time 字段是否发生了什么?
#4 楼 @chairy11 第一个问题:一个是 UTC,一个是本地时区时间,其实是相同的,只是显示的不同而已。 第二个问题:time 存储之后日期被重置,我也不知道原因(数据库?Rails 自动补全 date 部分?)。
最后的问题:可以通过调用 strftime 方法实现,根据显示格式的需求进行显示
2.0.0-p247 :001 > datetime = DateTime.now
=> Fri, 12 Sep 2014 16:53:18 +0800
2.0.0-p247 :002 > datetime.strftime('%Y-%m-%d') # date
=> "2014-09-12"
2.0.0-p247 :003 > datetime.strftime('%H:%M:%S') # time
=> "16:53:18"
2.0.0-p247 :004 > datetime.strftime('%Y-%m-%d %H:%M:%S') # datetime
=> "2014-09-12 16:53:18"
2.0.0-p247 :005 > datetime.strftime('%Y年%-m月%-d日') # date_zh
=> "2014年9月12日"
2.0.0-p247 :006 > datetime.strftime('%Y年%-m月%-d日 %H:%M:%S') # datetime_zh
=> "2014年9月12日 16:53:18"
PS:也可以通过设置 Time::DATE_FORMATS 来实现与上面相同的效果。
t.datetime "datetime"
t.datetime "timestamp"
t.datetime "created_at"
t.datetime "updated_at"