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