- 1. 概要
- 2. 現在 now
- 3. 演算
- 4. 書式出力 strftime
- 5. 文字列を日時に strptime
1. 概要
Time クラスで日付と時刻を扱うようです。
2. 現在 now
「now」で現在日時をローカルで取得するようです。
下記のソースを書いて。
now = Time::now()
puts("#{now}")
puts("#{now.year}年#{now.mon}月#{now.day}日 #{now.hour}:#{now.min}:#{now.sec}")
puts(sprintf("%04d年%02d月%02d日 %02d:%02d:%02d", now.year, now.mon, now.day, now.hour, now.min, now.sec))
puts("#{now.to_s}")
実行すると以下のような結果が得られます。
2025-02-23 21:04:36 +0900
2025年2月23日 21:4:36
2025年02月23日 21:04:36
2025-02-23 21:04:36 +0900
3. 演算
知りたかったのは、減算ですが。
普通に演算できるようです。
演算の結果は Float となる(単位は秒)ようで、書式化するのには工夫がいるようです。
下記のソースを書いて
#!/usr/bin/env ruby
time1 = Time::now();
sleep(60)
time2 = Time::now();
puts("時刻1 [#{time1}]")
puts("時刻2 [#{time2}]")
puts("差 [#{time2-time1}]")
diff = (time2 - time1).to_i
hour = diff/(60*60)
diff -= hour * (60*60)
min = diff/60
sec = diff - (min * 60)
puts(sprintf("%d:%02d:%02d", hour, min, sec))
実行すると以下のような結果が得られます。
時刻1 [2018-08-02 15:49:13 +0900]
時刻2 [2018-08-02 15:50:13 +0900]
差 [60.162065836]
0:01:00
熟知していれば、もっとスマートなソースが書けるんでしょうね。
4. 書式出力 strftime
strftime というメソッドを使用すれば、書式付きで出力できます。
「class Time (Ruby 2.5.0)」に詳細が記述されています。
ここはマニュアルではないので、わたしの使うものだけ・・・。
書式 | 出力 |
%H | 24時間制の時(00-23) |
%M | 分(00-59) |
%S | 秒(00-60) (60はうるう秒) |
%d | 日(01-31) |
%m | 月(01-12) |
%Y | 西暦4桁 |
now = Time::now()
puts("[#{sprintf("%02d", __LINE__)}] "+now.strftime("%Y年%m月%d日 %H:%M:%S"))
aftery = Time::mktime(now.year+1, now.mon, now.mday, now.hour, now.min, now.sec);
afterm = Time::mktime(now.year, now.mon+1, now.mday, now.hour, now.min, now.sec);
afterd = Time::mktime(now.year, now.mon, now.mday+1, now.hour, now.min, now.sec);
afterh = Time::mktime(now.year, now.mon, now.mday, now.hour+1, now.min, now.sec);
afteri = Time::mktime(now.year, now.mon, now.mday, now.hour, now.min+1, now.sec);
afters = Time::mktime(now.year, now.mon, now.mday, now.hour, now.min, now.sec+1);
puts("[#{__LINE__}] "+aftery.strftime("%Y年%m月%d日 %H:%M:%S"))
puts("[#{__LINE__}] "+afterm.strftime("%Y年%m月%d日 %H:%M:%S"))
puts("[#{__LINE__}] "+afterd.strftime("%Y年%m月%d日 %H:%M:%S"))
puts("[#{__LINE__}] "+afterh.strftime("%Y年%m月%d日 %H:%M:%S"))
puts("[#{__LINE__}] "+afteri.strftime("%Y年%m月%d日 %H:%M:%S"))
puts("[#{__LINE__}] "+afters.strftime("%Y年%m月%d日 %H:%M:%S"))
というソースを書いて実行すると以下のような結果が得られます。
[02] 2025年02月23日 21:04:36
[11] 2026年02月23日 21:04:36
[12] 2025年03月23日 21:04:36
[13] 2025年02月24日 21:04:36
[14] 2025年02月23日 22:04:36
[15] 2025年02月23日 21:05:36
[16] 2025年02月23日 21:04:37
5. 文字列を日時に strptime
前項の逆で文字列を日時に変換するには strptime を使うようです。
本項は「Rubyで文字列を日時に変換する方法 - maeharinの日記」を参考にさせていただきました。
require 'date'
datetime = DateTime.strptime('1961年05月04日 08:12:45', "%Y年%m月%d日 %H:%M:%S")
puts("[#{sprintf("%02d", __LINE__)}] "+datetime.strftime("%Y年%m月%d日 %H:%M:%S"))
というソースを書いて実行すると以下のような結果が得られます。
[04] 1961年05月04日 08:12:45
|