Ruby-date-time

提供:Dev Guides
移動先:案内検索

Ruby-日付と時刻

*Time* クラスは、Rubyの日付と時刻を表します。 これは、オペレーティングシステムによって提供されるシステムの日付と時刻の機能上の薄い層です。 このクラスは、システムで1970年以前または2038年以降の日付を表すことができない場合があります。

この章では、日付と時刻の最も必要なすべての概念について理解します。

現在の日付と時刻を取得する

以下は、現在の日付と時刻を取得する簡単な例です-

#!/usr/bin/ruby -w

time1 = Time.new
puts "Current Time : " + time1.inspect

# Time.now is a synonym:
time2 = Time.now
puts "Current Time : " + time2.inspect

これは、次の結果を生成します-

Current Time : Mon Jun 02 12:02:39 -0700 2008
Current Time : Mon Jun 02 12:02:39 -0700 2008

日付と時刻のコンポーネントの取得

_Time_オブジェクトを使用して、日付と時刻のさまざまなコンポーネントを取得できます。 以下は同じことを示す例です-

#!/usr/bin/ruby -w

time = Time.new

# Components of a Time
puts "Current Time : " + time.inspect
puts time.year    # => Year of the date
puts time.month   # => Month of the date (1 to 12)
puts time.day     # => Day of the date (1 to 31 )
puts time.wday    # => 0: Day of week: 0 is Sunday
puts time.yday    # => 365: Day of year
puts time.hour    # => 23: 24-hour clock
puts time.min     # => 59
puts time.sec     # => 59
puts time.usec    # => 999999: microseconds
puts time.zone    # => "UTC": timezone name

これは、次の結果を生成します-

Current Time : Mon Jun 02 12:03:08 -0700 2008
2008
6
2
1
154
12
3
8
247476
UTC

Time.utc、Time.gm、およびTime.local関数

これらの2つの関数は、次のように標準形式で日付をフォーマットするために使用することができます-

# July 8, 2008
Time.local(2008, 7, 8)
# July 8, 2008, 09:10am, local time
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 (same as 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

これは、次の結果を生成します-

[26, 10, 12, 2, 6, 2008, 1, 154, false, "MST"]

この配列は、次のように日付の異なる形式を取得するために_Time.utc_または_Time.local_関数に渡すことができます-

#!/usr/bin/ruby -w

time = Time.new
values = time.to_a
puts Time.utc(*values)

これは、次の結果を生成します-

Mon Jun 02 12:15:36 UTC 2008

以下は、(プラットフォームに依存する)エポック以降の秒として内部的に表される時間を取得する方法です-

# Returns number of seconds since epoch
time = Time.now.to_i

# Convert number of seconds into Time object.
Time.at(time)

# Returns second since epoch which includes microseconds
time = Time.now.to_f

タイムゾーンと夏時間

あなたは次のようにタイムゾーンと夏時間に関連するすべての情報を取得するために_Time_オブジェクトを使用することができます-

time = Time.new

# Here is the interpretation
time.zone       # => "UTC": return the timezone
time.utc_offset # => 0: UTC is 0 seconds offset from UTC
time.zone       # => "PST" (or whatever your timezone is)
time.isdst      # => false: If UTC does not have DST.
time.utc?       # => true: if t is in UTC time zone
time.localtime  # Convert to local timezone.
time.gmtime     # Convert back to UTC.
time.getlocal   # Return a new Time object in local zone
time.getutc     # Return a new Time object in UTC

時間と日付のフォーマット

日付と時刻をフォーマットするには、さまざまな方法があります。 ここにいくつかの例を示します-

#!/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")

これは、次の結果を生成します-

Mon Jun 02 12:35:19 -0700 2008
Mon Jun  2 12:35:19 2008
Mon Jun 02 12:35:19 -0700 2008
2008-06-02 12:35:19

時間フォーマット指令

次の表のこれらのディレクティブは、_Time.strftime_メソッドで使用されます。

Sr.No. Directive & Description
1

%a

曜日の短縮名(日)。

2

%A

完全な曜日名(日曜日)。

3

%b

短縮された月名(Jan)。

4

%B

完全な月名(1月)。

5

%c

優先されるローカルの日付と時刻の表現。

6

%d

月の日(01〜31)。

7

%H

24時間制(00〜23)。

8

%I

時刻、12時間制(01から12)。

9

%j

年の日(001から366)。

10

%m

月(01〜12)。

11

%M

分(00から59)。

12

%p

子午線インジケータ(AMまたはPM)。

13

%S

秒(00から60)。

14

%U

最初の日曜日を最初の週の最初の日として開始する、現在の年の週番号(00〜53)。

15

%W

最初の週の最初の日として最初の月曜日から始まる、現在の年の週番号(00〜53)。

16

%w

曜日(日曜日は0、0〜6)。

17

%x

日付のみ、時間なしの優先表現。

18

%X

日付なしの時刻のみの優先表現。

19

%y

世紀のない年(00から99)。

20

%Y

世紀のある年。

21

%Z

タイムゾーン名。

22

%%

リテラル%文字。

時間演算

次のように時間を使用して簡単な算術演算を実行できます-

now = Time.now          # Current time
puts now

past = now - 10         # 10 seconds ago. Time - number => Time
puts past

future = now + 10  # 10 seconds from now Time + number => Time
puts future

diff = future - past     # => 10  Time - Time => number of seconds
puts diff

これは、次の結果を生成します-

Thu Aug 01 20:57:05 -0700 2013
Thu Aug 01 20:56:55 -0700 2013
Thu Aug 01 20:57:15 -0700 2013
20.0