Rails:使时间戳显示为时间戳。
Rails:使时间戳显示为时间戳。
我正在使用Ruby on Rails和ActiveRecords。实际上,所有这些数据类型(如DateTime、Time等)让我感到恶心。我在前端渲染所有与数据相关的内容,所以当从数据库检索时间戳时,我只需要简单的整数。我能在我的代码中不使用太多的`to_int`吗?
假设我有一个迁移文件,如下所示:
class CreateUsers < ActiveRecord::Migration def change create_table :users do |t| t.string :email, null: false t.string :crypted_password, null: false t.string :password_salt, null: false t.string :persistence_token, null: false t.timestamps null: false end end end
然后我做了以下操作:
<%= @user.created_at =>
我得到了类似于2015-02-11 14:11:04 UTC的结果(因为实际上是DateTime to_s)。而我只需要1423663864(所以我必须做类似于<%= @user.created_at.to_i =>的操作)。所以这做了4次转换:
1. 将数据库的4字节整数转为数据库字符串
2. 将数据库字符串转为Ruby的DateTime
3. 将DateTime转为整数(第一步中的4字节)
4. 将Ruby整数转为Ruby字符串
Rails中的默认日期输出格式是以Unix时间戳表示的,如果想要修改为其他格式,可以通过以下代码实现:
Date::DATE_FORMATS[:default] = "%s"
根据strftime文档的说明,%s代表自1970年01月01日00:00:00 UTC以来的秒数,即Unix时间戳。
关于Rails中如何处理datetime和timestamp类型的详细信息,可以在这个答案的末尾找到:点击这里。
问题出现的原因是在Ruby中,可以通过调用to_i或to_f方法来获取Date/Time/DateTime对象的"自纪元以来的秒数"值,以整数或浮点数格式表示。
解决方法是使用strftime方法来将时间戳转换为指定格式的字符串。在Rails中,可以使用strftime方法来格式化时间戳。
以下是将时间戳格式化为指定格式的示例代码:
timestamp = Time.now.to_i formatted_timestamp = Time.at(timestamp).strftime("%Y-%m-%d %H:%M:%S") puts formatted_timestamp
上述代码将当前时间戳格式化为"YYYY-MM-DD HH:MM:SS"的字符串格式,并输出结果。
通过使用strftime方法,我们可以根据需要将时间戳转换为各种自定义的日期和时间格式。