Ruby - Datum & Uhrzeit

Das TimeKlasse repräsentiert Datum und Uhrzeit in Ruby. Es ist eine dünne Schicht über der vom Betriebssystem bereitgestellten Datums- und Uhrzeitfunktionalität des Systems. Diese Klasse kann auf Ihrem System möglicherweise keine Daten vor 1970 oder nach 2038 darstellen.

Dieses Kapitel macht Sie mit den wichtigsten Konzepten von Datum und Uhrzeit vertraut.

Aktuelles Datum und Uhrzeit abrufen

Im Folgenden finden Sie ein einfaches Beispiel, um das aktuelle Datum und die aktuelle Uhrzeit abzurufen.

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

Dies führt zu folgendem Ergebnis:

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

Komponenten eines Datums und einer Uhrzeit abrufen

Wir können das Time- Objekt verwenden, um verschiedene Komponenten von Datum und Uhrzeit abzurufen. Das folgende Beispiel zeigt dasselbe -

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

Dies führt zu folgendem Ergebnis:

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

Time.utc-, Time.gm- und Time.local-Funktionen

Mit diesen beiden Funktionen können Sie das Datum wie folgt in einem Standardformat formatieren:

# 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)

Das folgende Beispiel zeigt, wie alle Komponenten in einem Array im folgenden Format abgerufen werden:

[sec,min,hour,day,month,year,wday,yday,isdst,zone]

Versuchen Sie Folgendes:

#!/usr/bin/ruby -w

time = Time.new
values = time.to_a
p values

Dies führt zu folgendem Ergebnis:

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

Dieses Array kann an die Funktionen Time.utc oder Time.local übergeben werden, um ein anderes Datumsformat wie folgt zu erhalten:

#!/usr/bin/ruby -w

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

Dies führt zu folgendem Ergebnis:

Mon Jun 02 12:15:36 UTC 2008

Im Folgenden wird beschrieben, wie die Zeit intern als Sekunden seit der (plattformabhängigen) Epoche dargestellt wird.

# 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

Zeitzonen und Sommerzeit

Sie können ein Zeitobjekt verwenden , um alle Informationen zu Zeitzonen und Sommerzeit wie folgt abzurufen:

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

Formatierungszeiten und -daten

Es gibt verschiedene Möglichkeiten, Datum und Uhrzeit zu formatieren. Hier ist ein Beispiel, das einige zeigt -

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

Dies führt zu folgendem Ergebnis:

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

Zeitformatierungsanweisungen

Diese Anweisungen in der folgenden Tabelle werden mit der Methode Time.strftime verwendet .

Sr.Nr. Richtlinie & Beschreibung
1

%a

Der abgekürzte Wochentagsname (So).

2

%A

Der vollständige Wochentagsname (Sonntag).

3

%b

Der abgekürzte Monatsname (Jan).

4

%B

Der vollständige Monatsname (Januar).

5

%c

Die bevorzugte lokale Datums- und Uhrzeitdarstellung.

6

%d

Tag des Monats (01 bis 31).

7

%H

Tageszeit, 24-Stunden-Uhr (00 bis 23).

8

%I

Stunde des Tages, 12-Stunden-Uhr (01 bis 12).

9

%j

Tag des Jahres (001 bis 366).

10

%m

Monat des Jahres (01 bis 12).

11

%M

Minute der Stunde (00 bis 59).

12

%p

Meridiananzeige (AM oder PM).

13

%S

Sekunde der Minute (00 bis 60).

14

%U

Wochennummer des laufenden Jahres, beginnend mit dem ersten Sonntag als erstem Tag der ersten Woche (00 bis 53).

15

%W

Wochennummer des laufenden Jahres, beginnend mit dem ersten Montag als erstem Tag der ersten Woche (00 bis 53).

16

%w

Wochentag (Sonntag ist 0, 0 bis 6).

17

%x

Bevorzugte Darstellung nur für das Datum, keine Zeit.

18

%X

Bevorzugte Darstellung nur für die Zeit, kein Datum.

19

%y

Jahr ohne Jahrhundert (00 bis 99).

20

%Y

Jahr mit Jahrhundert.

21

%Z

Name der Zeitzone.

22

%%

Literal% Zeichen.

Zeitarithmetik

Sie können einfache Arithmetik mit der Zeit wie folgt ausführen:

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

Dies führt zu folgendem Ergebnis:

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