Ruby 日付 & 時間(Date & Time)
Timeクラスは Ruby で日付と時刻を表すために使用されます。これはオペレーティングシステムが提供するシステム日付と時刻に基づいています。このクラスは1970年以前または2038年以降の日付を表現できない場合があります。
このチュートリアルでは、日付と時刻に関する重要な概念をすべて学ぶことができます。
現在の日付と時刻を作成する
現在の日付と時刻を取得する簡単な例は次のとおりです:
例
#!/usr/bin/ruby -w
# -*- coding: UTF-8 -*-
time1 = Time.new
puts "現在の時刻:" + time1.inspect
#Time.now と同じ機能です
time2 = Time.now
puts "現在の時刻:" + time2.inspect
試してみる »
上記の例を実行した出力結果は次のとおりです:
当前时间 : 2015-09-17 15:23:14 +0800 当前时间 : 2015-09-17 15:23:14 +0800
Date & Time コンポーネントの取得
私たちは使用できますTimeオブジェクトを使用して、さまざまな日付と時刻のコンポーネントを取得できます。次の例を参照してください。
例
#!/usr/bin/ruby -w
# -*- coding: UTF-8 -*-
time = Time.new
#Time のコンポーネント
puts "現在の時刻:" + time.inspect
puts time.year #=> 日付の年
puts time.month #=> 月(1 から 12)
puts time.day #=> 日(1 から 31)
puts time.wday #=> 曜日(0 は日曜日)
puts time.yday #=> 365:年の通算日
puts time.hour #=> 23:24時間制
puts time.min # => 59
puts time.sec # => 59
puts time.usec #=> 999999:マイクロ秒
puts time.zone #=> "UTC":タイムゾーン名
上記の例を実行した出力結果は次のとおりです:
当前时间 : 2015-09-17 15:24:44 +0800 2015 9 17 4 260 15 24 44 921519 CST
Time.utc、Time.gmとTime.local関数
これらの関数は、日付を標準形式でフォーマットするために使用できます。次のようになります。
# July 8, 2008
Time.local(2008, 7, 8)
#July 8, 2008, 09:10am、現地時間
Time.local(2008, 7, 8, 9, 10)
# July 8, 2008, 09:10 UTC
Time.utc(2008, 7, 8, 9, 10)
#July 8, 2008, 09:10:11 GMT(UTC と同じ)
Time.gm(2008, 7, 8, 9, 10, 11)
次の例では、すべてのコンポーネントを配列で取得します:
[sec,min,hour,day,month,year,wday,yday,isdst,zone]
次の例を試してください:
例
#!/usr/bin/ruby -w
time = Time.new
values = time.to_a
p values
上記の例を実行した出力結果は次のとおりです:
[39, 25, 15, 17, 9, 2015, 4, 260, false, "CST"]
この配列は渡すことができますTime.utc 或 Time.local関数に渡して、日付の異なる形式を取得できます。次のようになります。
例
#!/usr/bin/ruby -w
time = Time.new
values = time.to_a
puts Time.utc(*values)
上記の例を実行した出力結果は次のとおりです:
2015-09-17 15:26:09 UTC
以下は、紀元(エポック)からの秒数で時間を取得する方法です(プラットフォームに依存)。
#紀元からの秒数を返します
time = Time.now.to_i
#秒数を Time オブジェクトに変換します
Time.at(time)
#紀元からの秒数を返します。マイクロ秒を含みます。
time = Time.now.to_f
タイムゾーンと夏時間
あなたは使用できますTimeオブジェクトを使用して、タイムゾーンと夏時間に関するすべての情報を取得できます。次のようになります。
time = Time.new
#以下は説明です。
time.zone #=> "UTC":タイムゾーンを返します
time.utc_offset #=> 0:UTC は UTC に対する 0 秒のオフセットです
time.zone #=> "PST"(または他のタイムゾーン)
time.isdst #=> false:UTC に DST(夏時間)がない場合
time.utc? #=> true:UTC タイムゾーンの場合
time.localtime #ローカルタイムゾーンに変換する
time.gmtime #UTC に変換し直す
time.getlocal #ローカルタイムゾーンで新しい Time オブジェクトを返す
time.getutc #UTC で新しい Time オブジェクトを返す
時間と日付のフォーマット
日付と時刻のフォーマットにはさまざまな方法があります。次の例はその一部を示しています。
例
#!/usr/bin/ruby -w
time = Time.new
puts time.to_s
puts time.ctime
puts time.localtime
puts time.strftime("%Y-%m-%d %H:%M:%S")
上記の例を実行した出力結果は次のとおりです:
2015-09-17 15:26:42 +0800 Thu Sep 17 15:26:42 2015 2015-09-17 15:26:42 +0800 2015-09-17 15:26:42
時間フォーマット指令
以下の表に示した指令とメソッドTime.strftimeを一緒に使用します。
| 指令 | 説明 |
|---|---|
| %a | 曜日名の略称(例:Sun)。 |
| %A | 曜日名の正式名称(例:Sunday)。 |
| %b | 月名の略称(例:Jan)。 |
| %B | 月名の正式名称(例:January)。 |
| %c | 優先されるローカルの日付と時刻の表現。 |
| %d | 月内の日(01 から 31)。 |
| %H | 1日のうちの時間(24時間制)(00 から 23)。 |
| %I | 1日のうちの時間(12時間制)(01 から 12)。 |
| %j | 年内の通算日(001 から 366)。 |
| %m | 年内の月(01 から 12)。 |
| %M | 1時間の中の分(00 から 59)。 |
| %p | 午前/午後の表示(AM または PM)。 |
| %S | 1分の中の秒(00 または 60)。 |
| %U | 現在の年の週番号。最初の日曜日を第1週の初日として開始(00 から 53)。 |
| %W | 現在の年の週番号。最初の月曜日を第1週の初日として開始(00 から 53)。 |
| %w | 週の何曜日か(Sunday は 0、0 から 6)。 |
| %x | 時刻なしで日付のみの優先表現。 |
| %X | 日付なしで時刻のみの優先表現。 |
| %y | 世紀を含まない年の表現(00 から 99)。 |
| %Y | 世紀を含む年。 |
| %Z | タイムゾーン名。 |
| %% | % 文字。 |
時間の演算
時間を使った簡単な算術演算ができます。次のようになります。
now = Time.now #現在の時刻
puts now
past = now - 10 #10秒前。Time - number => Time
puts past
future = now + 10 #現在から10秒後。Time + number => Time
puts future
diff = future - now #=> 10 Time - Time => 秒数
puts diff
上記の例を実行した出力結果は次のとおりです:
2015-09-17 15:27:08 +0800 2015-09-17 15:26:58 +0800 2015-09-17 15:27:18 +0800 10.0その他の拡張