Programmierung in Ruby

Der Leitfaden der Pragmatischen Programmierer

class Time
Parent: Object
Version: 1.6

Index:

at gm local mktime new now times utc + -- <=> asctime ctime day gmt? gmtime hour isdst localtime mday min mon month sec strftime to_a to_f to_i to_s tv_sec tv_usec usec utc utc? wday yday year zone


Time ist eine Abstraktion von Datums- und Zeitangaben. Time wird intern als die Zahl der Sekunden und Mikrosekunden seit dem 1. Januar 1970 00:00 UTC (dem Zeiturpsrung) gespeichert. Siehe hierzu auch die Bibliotheksmodule Date und ParseDate, die im Kapitel Standardbibliothek beschrieben sind. Die Time-Klasse behandelt mit GMT (Greenwich Mean Time) und UTC (Coordinated Universal Time)[Ja, UTC steht wirklich für Coordinated Universal Time. Es gab dafür sogar ein Kommittee.] als gleichwertig. GMT ist der ältere Weg, auf diese Basiszeiten zu verweisen, besteht jedoch in den Namen einiger Posix-Systemaufrufe weiter.

Alle Zeiten werden mit einer Angabe zu Mikrosekunden abgelegt. Behalte dies im Hinterkopf, wenn Vergleiche zwischen Zeiten gemacht werden sollen---Unterschiede beim Vergleich können auftreten, obwohl die Zeitanzeige gleich aussieht.
mixins
Comparable: <, <=, ==, >=, >, between?

class methods
at Time.at( eineZeit ) -> eineZeit
Time.at( Sekunden[, Mikrosekunden] ) -> eineZeit

Erstellt ein neues Time-Objekt mit dem Wert von eineZeit oder der angegebenen Anzahl von Sekunden (sowie optional Mikrosekunden) seit dem Zeitursprung.

Time.at(0) » Wed Dec 31 18:00:00 CST 1969
Time.at(946702800) » Fri Dec 31 23:00:00 CST 1999

gm Time.gm( Jahr [, Monat, Tag, Stunde, Minute, sec, usec] ) -> eineZeit
Time.gm( sec, Minute, Stunde, Tag, Monat, Jahr, Wochentag, Jahrtag, isdst, tz ) -> eineZeit

Erstellt ein neues Time-Objekt auf der Basis der übergebenen Parameter. Die Angaben werden alt UTC (GMT) interpretiert. Das Jahr muss angegeben werden. Die übrigen Werte werden default-mässig mit dem jeweils möglichen Minimalwert belegt (bzw. bleiben leer oder werden mit nil gefüllt). Monat liegt zwischen 1 und 12 bzw. ist die dreistellige englische Monatsabkürzung. Stunden werden auf der 24-Stunden Skala angegeben (0..23). Die Methode wirft einen ArgumentError, wenn Parameterwert ausserhalb des zulässigen Bereichs liegen. Sie akzeptiert auch die zehn Argumente, die von Time#to_a ausgegeben werden.

Time.gm(2000,"jan",1,20,15,1) » Sat Jan 01 20:15:01 UTC 2000

local Time.local( Jahr [, Monat, Tag, Stunde, Minute, sec, usec] ) -> eineZeit
Time.local( sec, Minute, Stunde, Tag, Monat, Jahr, Wochentag, Jahrtag, isdst, tz ) -> eineZeit

Dieselbe Funktion wie Time.gm, jedoch werden die Werte als zur lokalen Zeitzone gehörig interpretiert (und entsprechend in GMT umgerechnet; Anm.d.Übers.).

Time.local(2000,"jan",1,20,15,1) » Sat Jan 01 20:15:01 CST 2000

mktime Time.mktime( Jahr, Monat, Tag, Stunde, Minute, sec, usec ) -> eineZeit

Synonym für Time.local.

new Time.new -> eineZeit

Gibt ein Time-Objekt zurück, das auf die aktuelle Systemzeit initialisiert wurde. Hinweis: Das erstellte Objekt wird mit der auf dem aktuellen System möglichen Genauigkeit angelegt und kann daher auch Sekundenbruchteile enthalten.

a = Time.new » Sun Mar 04 23:30:26 CST 2001
b = Time.new » Sun Mar 04 23:30:26 CST 2001
a == b » false
"%.6f" % a.to_f » "983770226.132865"
"%.6f" % b.to_f » "983770226.133372"

now Time.now -> eineZeit

Synonym für Time.new.

times Time.times -> einStructTms

Gibt eine Tms Struktur zurück (vgl. Struct::Tms in diesem Kapitel), das sowohl Nutzer- als auch System-CPU-Zeiten für diesen Prozess enthält.

t = Time.times
[ t.utime, t.stime ] » [0.0, 0.01]

utc Time.utc( Jahr [, Monat, Tag, Stunde, Minute, sec, usec] ) -> eineZeit
Time.utc( sec, Minute, Stunde, Tag, Monat, Jahr, Wochentag, Jahrtag, isdst, tz ) -> eineZeit

Synonym für Time.gm.

Time.utc(2000,"jan",1,20,15,1) » Sat Jan 01 20:15:01 UTC 2000

instance methods
+ time + eineZahl-> eineZeit

Addition---Zählt eine (möglicherweise nicht ganzzahlige) Anzahl von Sekunden zu time hinzu und gibt das Ergebnis als neue Zeit zurück.

t = Time.now » Sun Mar 04 23:30:26 CST 2001
t + (60 * 60 * 24) » Mon Mar 05 23:30:26 CST 2001

-- time-eineZeit-> eineGleitkommazahl
time-einZahl-> eineZeit

Differenz---Gibt einen neuen Zeitwert zurück, der aus der Differenz von zwei Zeiten bzw. aus der Subtraktion der eineZahl Sekunden von time gebildet wird.

t = Time.now » Sun Mar 04 23:30:26 CST 2001
t2 = t + 2592000 » Wed Apr 04 00:30:26 CDT 2001
t2 - t » 2592000.0
t2 - 2592000 » Sun Mar 04 23:30:26 CST 2001

<=> time <=> eineAndereZeit-> -1, 0, +1
time <=> eineZahl-> -1, 0, +1

Vergleich---Vergleicht time mit eineAndereZeit bzw. mit eineZahl, die (nicht ganzahlige) Anzahl der Sekunden seit dem Zeitursprung.

t = Time.now » Sun Mar 04 23:30:26 CST 2001
t2 = t + 2592000 » Wed Apr 04 00:30:26 CDT 2001
t <=> t2 » -1
t2 <=> t » 1
t <=> t » 0

asctime time.asctime -> einString

Gibt eine kanonische String-Darstellung von time zurück.

Time.now.asctime » "Sun Mar  4 23:30:26 2001"

ctime time.ctime -> einString

Synonym für Time#asctime.

day time.day -> eineFixnum

Gibt den Tag des Monats (1..n) für time zurück.

t = Time.now » Sun Mar 04 23:30:26 CST 2001
t.day » 4

gmt? time.gmt? -> true oder false

Gibt true zurück, wenn time eine Zeit in UTC (GMT) darstellt.

t = Time.now » Sun Mar 04 23:30:26 CST 2001
t.gmt? » false
t = Time.gm(2000,"jan",1,20,15,1) » Sat Jan 01 20:15:01 UTC 2000
t.gmt? » true

gmtime time.gmtime -> time

Konvertiert time nach UTC (GMT), ohne eine neue Instanz von Time zu erstellen.

t = Time.now » Sun Mar 04 23:30:26 CST 2001
t.gmt? » false
t.gmtime » Mon Mar 05 05:30:26 UTC 2001
t.gmt? » true

hour time.hour -> eineFixnum

Gibt die Stunde des Tages (0..23) von time.

t = Time.now » Sun Mar 04 23:30:26 CST 2001
t.hour » 23

isdst time.isdst -> true oder false

Gibt true zurück, wenn time in seiner Zeitzone in die Sommerzeit fällt.

t  = Time.local(2000, 7, 1) » Sat Jul 01 00:00:00 CDT 2000
t.isdst » true
t2 = Time.local(2000, 1, 1) » Sat Jan 01 00:00:00 CST 2000
t2.isdst » false

localtime time.localtime -> time

Konvertiert time in die lokale Zeit unter Verwendung der jeweils geltenden Zeitzone. Die Methode ändert das gegebene Objekt.

t = Time.gm(2000, "jan", 1, 20, 15, 1)
t.gmt? » true
t.localtime » Sat Jan 01 14:15:01 CST 2000
t.gmt? » false

mday time.mday -> eineFixnum

Synonym für Time#day.

min time.min -> eineFixnum

Gibt die Minute (0..59) der Stunde in time zurück.

t = Time.now » Sun Mar 04 23:30:26 CST 2001
t.min » 30

mon time.mon -> eineFixnum

Gibt den Monat (1..12) des Jahres in time zurück.

t = Time.now » Sun Mar 04 23:30:26 CST 2001
t.mon » 3

month time.month -> eineFixnum

Synonym für Time#mon.

sec time.sec -> aFixnum
Gibt die Sekunde (0..60)[Ja, Sekunden können wirklich von Null bis 60 reichen. Dies erlaubt es dem System, hin und wieder eine Zusatzsekunde einzuschieben, um die Tatsache zu korrigieren, dass Jahre nicht wirklich eine bestimmte Anzahl von Stunden lang sind.] der Minute in time zurück.

t = Time.now » Sun Mar 04 23:30:26 CST 2001
t.sec » 26

strftime time.strftime( einString ) -> einString

Formatiert time nach den Vorgaben im übergebenen Format-String. Siehe auch die Tabelle 22.9 für die möglichen Formatieranweisungen. Jeder Text, der nicht als Formatieranweisung aufgeführt ist, wird in den Ausgabestring durchgereicht.

t = Time.now
t.strftime("Printed on %m/%d/%Y") » "Printed on 03/04/2001"
t.strftime("at %I:%M%p") » "at 11:30PM"

Time#strftime Formatieranweisungen
Format Bedeutung
%a Der abgekürzte Wochentagname (``Sun'')
%A Der volle Wochentagname (``Sunday'')
%b Der abgekürzte Monatsname (``Jan'')
%B Der volle Monatsname (``January'')
%c Die lokal bevorzugte Darstellung von Datum und Zeit
%d Der Tag des Monats (01..31)
%H Die Stundenangabe auf der 24-Stunden-Skala (00..23)
%I Die Stundenangabe auf der 12-Stunden-Skala (01..12)
%j Der Tag des Jahres (001..366)
%m Der Monat des Jahres (01..12)
%M Die Minutenangabe (00..59)
%p Der Meridian Indikator (``AM'' or ``PM'')
%S Die Sekundenangabe (00..60)
%U Die Wochennummer des laufenden Jahres, die mit dem ersten Sonntag des Jahres als erstem Tag der Woche startet (00..53)
%W Die Wochennummer des laufenden Jahres, die mit dem ersten Montag des Jahres als erstem Tag der Wiche startet (00..53)
%w Tagesnummer in der Woche (Sonntag ist 0, 0..6)
%x Die bevorzugte Darstellung des Datums ohne Zeitangabe
%X Die bevorzugte Darstellung der Zeit ohne Datumsangabe
%y Die Jahresangabe ohne Jahrhundert (00..99)
%Y Die Jahresangabe mit Jahrhundert (vierstellig)
%Z Name der Zeitzone
%% Literales Prozentzeichen

to_a time.to_a -> einArray

Gibt einArray mit zehn Elementen zurück, das die Werte von time enthält: {[ sec, min, hour, day, month,year, wday, yday, isdst, zone ]}. Die Erläuterung der Wertebereiche der einzelnen Elemente sind bei den jeweiligen Methoden zu finden. Die zehn Elemente können direkt an Time.utc oder Time.local übergeben werden, um eine neue Instanz von Time zu erstellen.

now = Time.now » Sun Mar 04 23:30:26 CST 2001
t = now.to_a » [26, 30, 23, 4, 3, 2001, 0, 63, false, "CST"]

to_f time.to_f -> eineGleitkommazahl

Gibt den Wert von time als eine Gleitkommazahl von Sekunden seit dem Zeitursprung.

t = Time.now
"%10.5f" % t.to_f » "983770226.64529"
t.to_i » 983770226

to_i time.to_i -> einInteger

Gibt den Wert von time als eine ganzzahlige Anzahl von Sekunden seit dem Zeitursprung zurück.

t = Time.now
"%10.5f" % t.to_f » "983770226.67497"
t.to_i » 983770226

to_s time.to_s -> einString

Gibt einen String zurück, der time darstellt. Equivalent mit dem Aufruf von Time#strftime mit einem Formatstring von ``%a%b%d%H:%M:%S%Z%Y''.

Time.now.to_s » "Sun Mar 04 23:30:26 CST 2001"

tv_sec time.tv_sec -> einInteger

Synonym für Time#to_i.

tv_usec time.tv_usec -> einInteger

Synonym für Time#usec.

usec time.usec -> einInteger

Gibt nur die Anzahl der Mikrosekunden in time zurück.

t = Time.now » Sun Mar 04 23:30:26 CST 2001
"%10.6f" % t.to_f » "983770226.729373"
t.usec » 729373

utc time.utc -> time

Synonym für Time#gmtime.

t = Time.now » Sun Mar 04 23:30:26 CST 2001
t.utc? » false
t.utc » Mon Mar 05 05:30:26 UTC 2001
t.utc? » true

utc? time.utc? -> true oder false

Gibt true zurück, wenn time eine Zeitangabe in UTC (GMT) darstellt.

t = Time.now » Sun Mar 04 23:30:26 CST 2001
t.utc? » false
t = Time.gm(2000,"jan",1,20,15,1) » Sat Jan 01 20:15:01 UTC 2000
t.utc? » true

wday time.wday -> eineFixnum

Gibt eine Ganzzahl zurück, die den Tag der Woche als 0..6, mit Sonntag als Tag 0, zurückgibt.

t = Time.now » Sun Mar 04 23:30:26 CST 2001
t.wday » 0

yday time.yday -> einFixnum

Gibt eine Ganzzahl zurück, die den Tag des Jahres als 1..366 zurück gibt.

t = Time.now » Sun Mar 04 23:30:26 CST 2001
t.yday » 63

year time.year -> eineFixnum

Gibt das Jahr von time zurückgibt (inclusive Jahrhundertangabe).

t = Time.now » Sun Mar 04 23:30:26 CST 2001
t.year » 2001

zone time.zone -> einString

Gibt den Namen der Zeitzone zurück, die für time benutzt wird.

t = Time.gm(2000, "jan", 1, 20, 15, 1)
t.zone » "GMT"
t = Time.local(2000, "jan", 1, 20, 15, 1)
t.zone » "CST"


Extracted from the book "Programming Ruby - The Pragmatic Programmer's Guide"
Übersetzung: Carsten Schinzer
Für das englische Original:
© 2000 Addison Wesley Longman, Inc. Released under the terms of the Open Publication License V1.0. That reference is available for download.
Diese Lizenz sowie das Original vom Herbst 2001 bilden die Grundlage der Übersetzung
Es wird darauf hingewiesen, dass sich die Lizenz des englischen Originals inzwischen geändert hat.
Für die deutsche Übersetzung:
© 2002 Jürgen Katins
Der Copyright-Eigner stellt folgende Lizenzen zur Verfügung:
Nicht-freie Lizenz:
This material may be distributed only subject to the terms and conditions set forth in the Open Publication License, v1.0 or later (the latest version is presently available at http://www.opencontent.org/openpub/). Distribution of substantively modified versions of this document is prohibited without the explicit permission of the copyright holder. Distribution of the work or derivative of the work in any standard (paper) book form is prohibited unless prior permission is obtained from the copyright holder.
Freie Lizenz:
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".