Die Programmiersprache Ruby (German Edition)
Standardbibliothek
date
sind nicht so eingeschränkt, werden hier aber nicht weiter vorgestellt
# Time-Objekte erstellen
Time.now # Gibt ein Zeitobjekt mit der aktuellen Uhrzeit zurück
Time.new # Synonym für Time.now
Time.local(2007, 7, 8) # 8. Juli 2007
Time.local(2007, 7, 8, 9, 10) # 8. Juli 2007, 09:10 (morgens), lokale Zeit
Time.utc(2007, 7, 8, 9, 10) # 8. Juli 2007, 09:10 UTC
Time.gm(2007, 7, 8, 9, 10, 11) # 8. Juli 2007, 09:10:11 GMT (entspricht UTC)
# Eine Mikrosekunde bevor das neue Jahrtausend in London begann
# Wir werden dieses Time-Objekt in vielen der folgenden Beispiele nutzen.
t = Time.utc(2000, 12, 31, 23, 59, 59, 999999)
# Komponenten von Time
t.year # => 2000
t.month # => 12: Dezember
t.day # => 31
t.wday # => 0: Wochentag: 0 ist Sonntag
t.yday # => 366: Tag des Jahres: 2000 war ein Schaltjahr
t.hour # => 23: 24-Stunden-Uhr
t.min # => 59
t.sec # => 59
t.usec # => 999999: Mikrosekunden, nicht Millisekunden
t.zone # => "UTC": Name der Zeitzone
# Alle Komponenten in ein Array lesen:
# [sec,min,hour,day,month,year,wday,yday,isdst,zone]
# Achtung: Wir verlieren die Mikrosekunden
values = t.to_a # => [59, 59, 23, 31, 12, 2000, 0, 366, false, "UTC"]
# Arrays dieser Form können an Time.local und Time.utc übergeben werden
values[5] += 1 # Das Jahr erhöhen
Time.utc(*values) # => Mon Dec 31 23:59:59 UTC 2001
# Zeitzonen und Sommerzeit
t.zone # => "UTC": Zeitzone
t.utc? # => true: t ist in der UTC
t.utc_offset # => 0: UTC hat 0 Sekunden Offset zur UTC
t.localtime # Umwandeln in lokale Zeitzone. Verändert das Time-Objekt!
t.zone # => "PST" (oder was Ihre Zeitzone auch immer ist)
t.utc? # => false
t.utc_offset # => −28800: 8 Stunden vor UTC
t.gmtime # Zurückwandeln in die UTC. Nochmals Veränderung.
t.getlocal # Gib ein neues Time-Objekt in der lokalen Zeitzone zurück
t.getutc # Gib ein neues Time-Objekt in UTC zurück
t.isdst # => false: UTC hat keine DST. Achtung: kein ?
t.getlocal.isdst # => false: Keine Sommerzeit im Winter
# Weekday predicates: Ruby 1.9
t.sunday? # => true
t.monday? # => false
t.tuesday? # etc.
# Uhrzeiten und Datumswerte formatieren
t.to_s # => "Sun Dec 31 23:59:59 UTC 2000": Ruby 1.8
t.to_s # => "2000-12-31 23:59:59 UTC": Ruby 1.9 verwendet ISO-8601
t.ctime # => "Sun Dec 31 23:59:59 2000": ein anderes Standardformat
# strftime formatiert Datums- und Zeitkomponenten in einen Template-String
# Formatierung ist unabhängig vom Locale
t.strftime("%Y-%m-%d %H:%M:%S") # => "2000-12-31 23:59:59": ISO-8601-Format
t.strftime("%H:%M") # => "23:59": 24-Stunden-Zeit
t.strftime("%I:%M %p") # => "11:59 PM": 12-Stunden-Zeit
# Formate abhängig vom Locale
t.strftime("%A, %B %d") # => "Sunday, December 31"
t.strftime("%a, %b %d %y") # => "Sun, Dec 31 00": zweistelliges Jahr
t.strftime("%x") # => "12/31/00": Locale-abhängig
t.strftime("%X") # => "23:59:59"
t.strftime("%c") # Entspricht ctime
# Zeiten und Datumswerte parsen
require 'parsedate' # Eine nützliche Parsing-Bibliothek für Datum/Uhrzeit
include ParseDate # Nimm parsedate() als globale Funktion auf
datestring = "2001-01-01"
values = parsedate(datestring) # [2001, 1, 1, nil, nil, nil, nil, nil]
t = Time.local(*values) # => Mon Jan 01 00:00:00 −0800 2001
s = t.ctime # => "Mon Jan 1 00:00:00 2001"
Time.local(*parsedate(s))==t # => true
s = "2001-01-01 00:00:00-0500" # Mitternacht in New York
v = parsedate(s) # => [2001, 1, 1, 0, 0, 0, "-0500", nil]
t = Time.local(*v) # Verlust der Zeitzoneninformation!
# Zeit-Berechnungen
now = Time.now # Aktuelle Uhrzeit
past = now - 10 # 10 Sekunden vorher. Time - number => Time
future = now + 10 # 10 Sekunden nach jetzt. Time + number => Time
future - now # => 10 Time - Time => Anzahl der Sekunden
# Zeit-Vergleiche
past <=> future # => −1
past < future # => true
now >= future # => false
now == now # => true
# Hilfsmethoden zum Arbeiten mit anderen Zeiteinheiten als Sekunden
class Numeric
# Wandle Zeitintervalle in Sekunden
def milliseconds; self/1000.0; end
def seconds; self; end
def minutes; self*60; end
def hours; self*60*60; end
def days; self*60*60*24; end
def weeks; self*60*60*24*7; end
# Wandle Sekunden in andere Intervalle
def to_milliseconds; self*1000; end
def to_seconds; self; end
def to_minutes; self/60.0; end
def to_hours; self/(60*60.0); end
def to_days; self/(60*60*24.0); end
def to_weeks; self/(60*60*24*7.0); end
end
expires = now + 10.days # Zehn Tage in der Zukunft
expires - now # => 864000.0 Sekunden
(expires - now).to_hours # => 240.0 Stunden
# Time
Weitere Kostenlose Bücher