Time
全然関係ないけど、Railsでは Time.now とかは使っちゃアカンよ。Time.zone.now か Time.current を使うんじゃ
- 世界標準時の起算日(UTC,GMT 1970/01/0100:00:00)からの経過秒数で保持されている
- タイムゾーンとして、UTCや地方時刻を指定できる
- 内部的に環境依存した時刻システムに依存している(負の時刻が許されるシステム、32.64bitの差等でエラーになる事も
Timeオブジェクトの生成
Time.new | |
Time.now | |
Time.at | |
Time.mktime | Time.local |
Time.gm | Time.utc |
Time.new Time.now メソッド
- 現在時刻のTimeオブジェクトを返す
- タイムゾーンはローカルタイムとなる 日本で実行しているなら +0900
Time.now.class
=> Time
Time.now
=> 2017-02-22 00:00:00 +0900
Time.at メソッド
- 起算日からの経過秒数を引数で指定したTimeオブジェクトを返す
- 第2引数にマイクロ秒を指定することも可能
- タイムゾーンはローカルタイムとなる 日本で実行しているなら +0900
Time.at(1234567890)
=> 2009-02-14 08:31:30 +0900
Time.at(1234567890, 1234567890)
=> 2009-02-14 08:52:04 +0900
Time.mktime Time.local メソッド
- 引数の数に応じて引数の意味が変わるメソッド
- 引数が7つ以下の場合(年, 月 = 1, 日 = 1, 時 = 0, 分 = 0, 秒 = 0, マイクロ秒 = 0) 月は’Jan’とかも指定可能
- 引数が10の場合(秒, 分, 時, 日, 月, 年, 曜日, 年日, 夏時間の真理値, タイムゾーン)
- タイムゾーンはローカルタイムとなる 日本で実行しているなら +0900
Time.local(2017, 1, 1, 1, 1, 1, 0)
=> 2017-01-01 01:01:01 +0900
Time.local(1, 1, 1, 1, 1, 2017, 0, 1, false, 'JST')
=> 2017-01-01 01:01:01 +0900
ちなみに time#to_a で引数が10のパターンの値が取得できる
Time.local(2017, 1, 1, 1, 1, 1, 0).to_a
=> [1, 1, 1, 1, 1, 2017, 0, 1, false, "JST"]
Time.gm Time.utc メソッド
- 引数の数や順序は Time.mktime と同じ
- タイムゾーンはUTCとなる
Time.utc(2017, 1, 1, 1, 1, 1, 0)
=> 2017-01-01 01:01:01 UTC
Time.utc(1, 1, 1, 1, 1, 2017, 0, 1, false, 'JST')
=> 2017-01-01 01:01:01 UTC
timeオブジェクトのメソッド
time#year | 年 | |
time#month | time#mon | 月 |
time#mday | time#day | 日 |
time#hour | 時 | |
time#min | 分 | |
time#sec | 秒 | |
time#usec | time#tv_sec | マイクロ秒 |
time#wday | 曜日 | |
time#yday | 1月1日からの日数 | |
time#zone | タイムゾーン | |
time#isdst | time#dst? | 夏時間? |
time#gmt? | time#utc? | UTC? |
time#gmt_offset | time#gmtoff | UTCとの秒差 |
タイムゾーンの変更
time#localtime | ローカルタイム | 破壊的メソッド | |
time#gmtime | time#utc | UTC | 破壊的メソッド |
time#getlocal | ローカルタイム | ||
time#getgm | time#getutc | UTC |
ローカルタイムに変更、UTCに変更、ローカルタイムの新しいオブジェクトを生成、UTCの新しいオブジェクトを生成 という感じ
timeオブジェクトの演算
time#+ | 秒数を加算 |
time#- | 秒数を減算 |
timeオブジェクト同士の減算
time#- | 秒差をFloatオブジェクトで取得 |
timeオブジェクトの変換
time#to_i | tv_sec | 起算日からの秒数 |
time#to_f | 起算日からの秒数 | |
time#to_a | 秒, 分, 時, 日, 月, 年, 曜日, 年日, 夏時間の真理値, タイムゾーン | |
time#to_s | UNIXコマンドのdateコマンド風の文字列 | |
time#strftime | 指定したフォーマットに従って文字列に変換 |
time#strftimeのフォーマット
%A | 英語の曜日 |
%a | 英語の曜日の省略形 |
%B | 英語の月 |
%b | 英語の月の省略形 |
%c | 日付と時刻 |
%d | 日(01-31) |
%H | 24時間制の時(00-23) |
%l | 12時間制の時(01-12) |
%j | 年中の通算日(1-366) |
%M | 分(00-59) |
%m | 月(01-12) |
%p | 午前/午後(AM/PM) |
%S | 秒(00-60) |
%U | 第何週 日曜日始まり(00-53) |
%W | 第何週 月曜日始まり(00-53) |
%w | 曜日 日曜日が0(0-6) |
%X | 時刻 |
%x | 日付 |
%Y | 西暦 |
%y | 西暦の下2桁(00-99) |
%Z | タイムゾーン |
%% | % |
Time.now.strftime('%Y/%m/%d %T')
=> "2017/02/22 00:00:00"