LoginSignup
0
0

More than 5 years have passed since last update.

RailsのTimeについて

Last updated at Posted at 2017-06-19

設定

config/application.rb
class Application < Rails::Application
  config.time_zone = 'Tokyo'
  config.active_record.default_timezone = :local
end

参考: Rails 4 でTimeZoneにちょっとはまった

Timeオブジェクト

どれを使えば良いのか、全然わかってない。
とりあえず、Time.nowかTime.currentを使おうと思う。

 pry(main)> Time.now
=> 2017-06-19 20:50:54 +0900
 pry(main)> Time.now.class
=> Time
 pry(main)> Time.current
=> Mon, 19 Jun 2017 20:51:22 JST +09:00
 pry(main)> Time.current.class
=> ActiveSupport::TimeWithZone
 pry(main)> Date.today
=> Mon, 19 Jun 2017
 pry(main)> Date.today.class
=> Date
 pry(main)> DateTime.now
=> Mon, 19 Jun 2017 20:54:23 +0900
 pry(main)> DateTime.now.class
=> DateTime
 pry(main)> DateTime.current
=> Mon, 19 Jun 2017 20:54:37 +0900
 pry(main)> DateTime.current.class
=> DateTime

MySQLとActiveRecord

MySQL

mysql> SHOW VARIABLES LIKE '%time_zone%';
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone | JST    |
| time_zone        | SYSTEM |
+------------------+--------+
2 rows in set (0.00 sec)

mysql> SELECT NOW();
+---------------------+
| NOW()               |
+---------------------+
| 2017-06-19 20:48:32 |
+---------------------+
1 row in set (0.00 sec)

mysql> SELECT * FROM users WHERE id = 1\G
*************************** 1. row ***************************
                    id: 1
                 email: admin@example.com
                  name: 管理者
    encrypted_password: 
   password_updated_at: NULL
  reset_password_token: NULL
reset_password_sent_at: NULL
   remember_created_at: NULL
         sign_in_count: 1
    current_sign_in_at: NULL
       last_sign_in_at: NULL
    current_sign_in_ip: 192.168.33.1
       last_sign_in_ip: 192.168.33.1
       failed_attempts: 0
          unlock_token: NULL
             locked_at: NULL
       created_user_id: 1
       updated_user_id: 1
            created_at: 2017-06-19 14:51:23
            updated_at: 2017-06-19 14:51:23
            deleted_at: NULL
1 row in set (0.00 sec)

上記のusersデータは、日本時間で、14:51:23に登録したものです。

 pry(main)> User.find(1).created_at
  User Load (0.4ms)  SELECT  `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1
=> Mon, 19 Jun 2017 14:51:23 JST +09:00
 pry(main)> User.where('created_at >= ?', Time.now).first
  User Load (0.4ms)  SELECT  `users`.* FROM `users` WHERE (created_at >= '2017-06-19 21:03:23.052284') ORDER BY `users`.`id` ASC LIMIT 1
=> nil
 pry(main)> User.where('created_at >= ?', Time.now - 12.hours).first
  User Load (0.4ms)  SELECT  `users`.* FROM `users` WHERE (created_at >= '2017-06-19 09:03:51.739876') ORDER BY `users`.`id` ASC LIMIT 1
=> #<User id: 1, email: "admin@example.com", name: "管理者", password_updated_at: nil, role: 1, created_user_id: 1, updated_user_id: 1, created_at: "2017-06-19 05:51:23", updated_at: "2017-06-19 05:51:23", deleted_at: nil>
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0