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メソッドで使用されます。

シニア番号 指令と説明
1

%a

平日の略称(日)。

2

%A

完全な平日の名前(日曜日)。

3

%b

月の省略名(1月)。

4

%B

完全な月の名前(1月)。

5

%c

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

6

%d

月の日(01から31)。

7

%H

1日の時間、24時間制(00から23)。

8

%I

1日の時間、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