class Time
Ein Time-Objekt repräsentiert ein Datum und eine Uhrzeit
Time.new(2000, 1, 1, 0, 0, 0) # => 2000-01-01 00:00:00 -0600
Obwohl sein Wert als einzelne Zahl ausgedrückt werden kann (siehe Epoch-Sekunden unten), kann es praktisch sein, mit dem Wert in Teilen zu arbeiten
t = Time.new(-2000, 1, 1, 0, 0, 0.0) # => -2000-01-01 00:00:00 -0600 t.year # => -2000 t.month # => 1 t.mday # => 1 t.hour # => 0 t.min # => 0 t.sec # => 0 t.subsec # => 0 t = Time.new(2000, 12, 31, 23, 59, 59.5) # => 2000-12-31 23:59:59.5 -0600 t.year # => 2000 t.month # => 12 t.mday # => 31 t.hour # => 23 t.min # => 59 t.sec # => 59 t.subsec # => (1/2)
Epoch-Sekunden
Epoch-Sekunden ist die exakte Anzahl von Sekunden (einschließlich fraktionaler Bruchteile von Sekunden) seit dem Unix-Epoch, 1. Januar 1970.
Sie können diesen Wert exakt mit der Methode Time.to_r abrufen
Time.at(0).to_r # => (0/1) Time.at(0.999999).to_r # => (9007190247541737/9007199254740992)
Andere Abrufmethoden wie Time#to_i und Time#to_f können einen Wert zurückgeben, der Bruchteile von Sekunden rundet oder abschneidet.
Zeit-Auflösung
Ein Time-Objekt, das von der Systemuhr abgeleitet ist (z. B. durch die Methode Time.now), hat die vom System unterstützte Auflösung.
Interne Darstellung der Zeit
Konzeptionell verwendet die Klasse Time einen rationalen Wert, um die Anzahl der Sekunden seit dem Epoch, 1970-01-01 00:00:00 UTC, darzustellen. Es gibt keine Grenz- oder Auflösungseinschränkungen. Der Wert kann mit Time#to_r abgerufen werden.
Die Klasse Time verwendet immer den Gregorianischen Kalender. D. h. der proleptische Gregorianische Kalender wird verwendet. Andere Kalender, wie z. B. der Julianische Kalender, werden nicht unterstützt.
Die Implementierung verwendet eine vorzeichenbehaftete 63-Bit-Ganzzahl, ein Integer (Bignum)-Objekt oder ein Rational-Objekt, um einen rationalen Wert darzustellen. (Die vorzeichenbehaftete 63-Bit-Ganzzahl wird unabhängig von 32- und 64-Bit-Umgebungen verwendet.) Der Wert stellt die Anzahl der Nanosekunden seit dem Epoch dar. Die vorzeichenbehaftete 63-Bit-Ganzzahl kann den Zeitraum von 1823-11-12 bis 2116-02-20 darstellen. Wenn ein Integer- oder Rational-Objekt verwendet wird (vor 1823, nach 2116, unter Nanosekunde), arbeitet Time langsamer als wenn die vorzeichenbehaftete 63-Bit-Ganzzahl verwendet wird.
Ruby verwendet die C-Funktionen localtime und gmtime, um zwischen der Zahl und einem 6-Tupel (Jahr, Monat, Tag, Stunde, Minute, Sekunde) zu wechseln. localtime wird für die lokale Zeit und gmtime für die UTC verwendet.
Integer und Rational haben keine Bereichsbeschränkung, aber localtime und gmtime haben Bereichsbeschränkungen aufgrund der C-Typen time_t und struct tm. Wenn diese Grenze überschritten wird, extrapoliert Ruby die localtime-Funktion.
time_t kann 1901-12-14 bis 2038-01-19 darstellen, wenn es sich um eine vorzeichenbehaftete 32-Bit-Ganzzahl handelt, und -292277022657-01-27 bis 292277026596-12-05, wenn es sich um eine vorzeichenbehaftete 64-Bit-Ganzzahl handelt. Allerdings unterstützt localtime auf einigen Plattformen keine negativen time_t-Werte (vor 1970).
struct tm hat das Mitglied tm_year zur Darstellung von Jahren. (tm_year = 0 bedeutet das Jahr 1900.) Es ist im C-Standard als int definiert. tm_year kann Jahre zwischen -2147481748 und 2147485547 darstellen, wenn int 32-Bit ist.
Ruby unterstützt Schaltsekunden, solange die C-Funktionen localtime und gmtime sie unterstützen. Diese verwenden in den meisten Unix-Systemen die tz-Datenbank. Die tz-Datenbank enthält Zeitzonen, die Schaltsekunden unterstützen. Zum Beispiel unterstützt "Asia/Tokyo" keine Schaltsekunden, aber "right/Asia/Tokyo" unterstützt Schaltsekunden. Ruby unterstützt also Schaltsekunden, wenn die Umgebungsvariable TZ auf "right/Asia/Tokyo" gesetzt ist, in den meisten Unix-Systemen.
Beispiele
Alle diese Beispiele wurden unter Verwendung der Zeitzone EST durchgeführt, die GMT-5 ist.
Erstellen einer neuen Time-Instanz
Sie können eine neue Instanz von Time mit Time.new erstellen. Dies verwendet die aktuelle Systemzeit. Time.now ist ein Alias dafür. Sie können auch Teile der Zeit an Time.new übergeben, wie Jahr, Monat, Minute usw. Wenn Sie eine Zeit auf diese Weise konstruieren möchten, müssen Sie mindestens ein Jahr angeben. Wenn Sie nur das Jahr übergeben, wird die Zeit standardmäßig auf den 1. Januar des Jahres um 00:00:00 Uhr in der aktuellen Systemzeitzone gesetzt. Hier sind einige Beispiele
Time.new(2002) #=> 2002-01-01 00:00:00 -0500 Time.new(2002, 10) #=> 2002-10-01 00:00:00 -0500 Time.new(2002, 10, 31) #=> 2002-10-31 00:00:00 -0500
Sie können einen UTC-Offset übergeben
Time.new(2002, 10, 31, 2, 2, 2, "+02:00") #=> 2002-10-31 02:02:02 +0200
Oder ein Zeitzonenobjekt
zone = timezone("Europe/Athens") # Eastern European Time, UTC+2 Time.new(2002, 10, 31, 2, 2, 2, zone) #=> 2002-10-31 02:02:02 +0200
Sie können auch Time.local und Time.utc verwenden, um lokale und UTC-Zeitzonen abzuleiten, anstatt die aktuelle Systemeinstellung zu verwenden.
Sie können auch eine neue Zeit mit Time.at erstellen, die die Anzahl der Sekunden (mit Bruchteilen) seit dem Unix-Epoch entgegennimmt.
Time.at(628232400) #=> 1989-11-28 00:00:00 -0500
Arbeiten mit einer Instanz von Time
Sobald Sie eine Instanz von Time haben, gibt es eine Vielzahl von Dingen, die Sie damit tun können. Nachfolgend finden Sie einige Beispiele. Für alle folgenden Beispiele gehen wir davon aus, dass Sie Folgendes getan haben
t = Time.new(1993, 02, 24, 12, 0, 0, "+09:00")
War das ein Montag?
t.monday? #=> false
Welches Jahr war das noch mal?
t.year #=> 1993
War zu dieser Zeit Sommerzeit?
t.dst? #=> false
Wie heißt der Tag ein Jahr später?
t + (60*60*24*365) #=> 1994-02-24 12:00:00 +0900
Wie viele Sekunden waren das seit dem Unix-Epoch?
t.to_i #=> 730522800
Sie können auch Standardfunktionen ausführen, wie das Vergleichen zweier Zeiten.
t1 = Time.new(2010) t2 = Time.new(2011) t1 == t2 #=> false t1 == t1 #=> true t1 < t2 #=> true t1 > t2 #=> false Time.new(2010,10,31).between?(t1, t2) #=> true
Was gibt es hier
Zuerst, was gibt es noch. Klasse Time
-
Erbt von Klasse Object.
-
Enthält das Modul
Comparable.
Hier bietet die Klasse Time Methoden, die nützlich sind für
Methoden zum Erstellen
-
::new: Gibt eine neue Zeit aus angegebenen Argumenten zurück (Jahr, Monat usw.), einschließlich eines optionalen Zeitzonenwerts. -
::local(alias für::mktime): Wie::new, außer dass die Zeitzone die lokale Zeitzone ist. -
::utc(alias für::gm): Wie::new, außer dass die Zeitzone UTC ist. -
::at: Gibt eine neue Zeit basierend auf Sekunden seit dem Epoch zurück. -
::now: Gibt eine neue Zeit basierend auf der aktuellen Systemzeit zurück. -
+(plus): Gibt eine neue Zeit zurück, erhöht um die angegebene Anzahl von Sekunden. -
-(minus): Gibt eine neue Zeit zurück, verringert um die angegebene Anzahl von Sekunden.
Methoden zum Abrufen
-
year: Gibt das Jahr der Zeit zurück. -
hour: Gibt den Stundenwert für die Zeit zurück. -
min: Gibt den Minutenwert für die Zeit zurück. -
sec: Gibt den Sekundenwert für die Zeit zurück. -
usec(alias fürtv_usec): Gibt die Anzahl der Mikrosekunden im Nachkommaanteil der Zeit zurück. -
nsec(alias fürtv_nsec: Gibt die Anzahl der Nanosekunden im Nachkommaanteil der Zeit zurück. -
subsec: Gibt den Nachkommaanteil der Zeit zurück. -
wday: Gibt den ganzzahligen Wochentagswert der Zeit zurück (0 == Sonntag). -
yday: Gibt den ganzzahligen Tag des Jahres-Wert der Zeit zurück (1 == 1. Januar). -
hash: Gibt den ganzzahligen Hash-Wert für die Zeit zurück. -
utc_offset(alias fürgmt_offsetundgmtoff): Gibt den Offset in Sekunden zwischen der Zeit und UTC zurück. -
to_f: Gibt die Gleitkommazahl der Sekunden seit dem Epoch für die Zeit zurück. -
to_i(alias fürtv_sec): Gibt die Ganzzahl der Sekunden seit dem Epoch für die Zeit zurück. -
to_r: Gibt dieRational-Zahl der Sekunden seit dem Epoch für die Zeit zurück. -
zone: Gibt eine Zeichenfolgendarstellung der Zeitzone der Zeit zurück.
Methoden zum Abfragen
-
dst?(alias fürisdst): Gibt zurück, ob die Zeit Sommerzeit (daylight saving time) ist. -
sunday?: Gibt zurück, ob die Zeit ein Sonntag ist. -
monday?: Gibt zurück, ob die Zeit ein Montag ist. -
tuesday?: Gibt zurück, ob die Zeit ein Dienstag ist. -
wednesday?: Gibt zurück, ob die Zeit ein Mittwoch ist. -
thursday?: Gibt zurück, ob die Zeit ein Donnerstag ist. -
friday?: Gibt zurück, ob die Zeit ein Freitag ist. -
saturday?: Gibt zurück, ob die Zeit ein Samstag ist.
Methoden zum Vergleichen
-
<=>: Vergleichtselfmit einer anderen Zeit. -
eql?: Gibt zurück, ob die Zeit mit einer anderen Zeit gleich ist.
Methoden zur Konvertierung
-
asctime(alias fürctime): Gibt die Zeit als Zeichenkette zurück. -
inspect: Gibt die Zeit detailliert als Zeichenkette zurück. -
strftime: Gibt die Zeit als Zeichenkette zurück, entsprechend einem gegebenen Format. -
to_a: Gibt ein 10-elementiges Array von Werten aus der Zeit zurück. -
to_s: Gibt eine Zeichenfolgendarstellung der Zeit zurück. -
getutc(alias fürgetgm): Gibt eine neue, in UTC konvertierte Zeit zurück. -
getlocal: Gibt eine neue, in lokale Zeit konvertierte Zeit zurück. -
localtime: Konvertiert die Zeit in lokale Zeit direkt. -
deconstruct_keys: Gibt einen Hash von Zeitkomponenten zurück, der für das Mustervergleich verwendet wird.
Methoden zum Runden
-
round: Gibt eine neue Zeit mit gerundeten Nachkommastellen zurück. -
ceil: Gibt eine neue Zeit mit aufgerundeten Nachkommastellen zurück. -
floor: Gibt eine neue Zeit mit abgerundeten Nachkommastellen zurück.
Für die Argumentformen von zone siehe Zeitzonenspezifizierer.
Zeitzonenspezifizierer
Bestimmte Time-Methoden akzeptieren Argumente, die Zeitzonen angeben
-
Time.at: Schlüsselwortargumentin:. -
Time.new: Positionsargumentzoneoder Schlüsselwortargumentin:. -
Time.now: Schlüsselwortargumentin:. -
Time#getlocal: Positionsargumentzone. -
Time#localtime: Positionsargumentzone.
Der Wert, der mit einer dieser Optionen angegeben wird, muss einer der folgenden sein (jeweils unten detailliert)
Stunden-/Minuten-Offsets
Der Wert für zone kann ein Zeichenketten-Offset von UTC im Format '+HH:MM' oder '-HH:MM' sein, wobei
-
HHdie 2-stellige Stunde im Bereich0..23ist. -
MMdie 2-stellige Minute im Bereich0..59ist.
Beispiele
t = Time.utc(2000, 1, 1, 20, 15, 1) # => 2000-01-01 20:15:01 UTC Time.at(t, in: '-23:59') # => 1999-12-31 20:16:01 -2359 Time.at(t, in: '+23:59') # => 2000-01-02 20:14:01 +2359
Einbuchstabige Offsets
Der Wert für zone kann ein Buchstabe im Bereich 'A'..'I' oder 'K'..'Z' sein; siehe Liste der militärischen Zeitzonen
t = Time.utc(2000, 1, 1, 20, 15, 1) # => 2000-01-01 20:15:01 UTC Time.at(t, in: 'A') # => 2000-01-01 21:15:01 +0100 Time.at(t, in: 'I') # => 2000-01-02 05:15:01 +0900 Time.at(t, in: 'K') # => 2000-01-02 06:15:01 +1000 Time.at(t, in: 'Y') # => 2000-01-01 08:15:01 -1200 Time.at(t, in: 'Z') # => 2000-01-01 20:15:01 UTC
Ganzzahlige Offsets
Der Wert für zone kann eine ganzzahlige Anzahl von Sekunden im Bereich -86399..86399 sein
t = Time.utc(2000, 1, 1, 20, 15, 1) # => 2000-01-01 20:15:01 UTC Time.at(t, in: -86399) # => 1999-12-31 20:15:02 -235959 Time.at(t, in: 86399) # => 2000-01-02 20:15:00 +235959
Zeitzonenobjekte
Der Wert für zone kann ein Objekt sein, das auf bestimmte Zeitzonenmethoden reagiert, z. B. eine Instanz von Timezone und TZInfo.
Die Zeitzonenmethoden sind
-
local_to_utc:Wird aufgerufen, wenn
Time.newmittzals Wert des Positionsargumentszoneoder des Schlüsselwortargumentsin:aufgerufen wird.- Argument
-
ein zeitähnliches Objekt.
- Gibt zurück
-
ein zeitähnliches Objekt in der UTC-Zeitzone.
-
utc_to_local:Wird aufgerufen, wenn
Time.atoderTime.nowmittzals Wert für das Schlüsselwortargumentin:aufgerufen wird, und wennTime#getlocaloderTime#localtimemittzals Wert für das Positionsargumentzoneaufgerufen wird.Der UTC-Offset wird als Differenz zwischen der ursprünglichen Zeit und dem zurückgegebenen Objekt als
Integerberechnet. Wenn das Objekt einen festen Offset hat, wird auch seinutc_offsetberücksichtigt.- Argument
-
ein zeitähnliches Objekt.
- Gibt zurück
-
ein zeitähnliches Objekt in der lokalen Zeitzone.
Eine benutzerdefinierte Zeitzonenklasse kann diese Instanzmethoden haben, die aufgerufen werden, wenn sie definiert sind
-
abbr:Wird aufgerufen, wenn
Time#strftimemit einem Format aufgerufen wird, das%Zenthält.- Argument
-
ein zeitähnliches Objekt.
- Gibt zurück
-
eine Zeichenkettenabkürzung für den Zeitzonennamen.
-
dst?:Wird aufgerufen, wenn
Time.atoderTime.nowmittzals Wert für das Schlüsselwortargumentin:aufgerufen wird, und wennTime#getlocaloderTime#localtimemittzals Wert für das Positionsargumentzoneaufgerufen wird.- Argument
-
ein zeitähnliches Objekt.
- Gibt zurück
-
ob die Zeit Sommerzeit hat.
-
name:Wird aufgerufen, wenn
Marshal.dump(t)aufgerufen wird- Argument
-
keine.
- Gibt zurück
-
der Zeichenkettenname der Zeitzone.
Time-ähnliche Objekte
Ein Time-ähnliches Objekt ist ein Containerobjekt, das mit Zeitzonenbibliotheken für die Zeitzonenkonvertierung Schnittstellen kann.
Die Argumente für die oben genannten Zeitzonenkonvertierungsmethoden haben Attribute, die denen von Time ähneln, außer dass zeitzonenbezogene Attribute bedeutungslos sind.
Die von den Methoden local_to_utc und utc_to_local eines Zeitzonenobjekts zurückgegebenen Objekte können von der gleichen Klasse wie ihre Argumente sein, von beliebigen Objektklassen oder von der Klasse Integer.
Für eine zurückgegebene Klasse, die keine Integer ist, muss die Klasse die folgenden Methoden haben
-
year -
mon -
mday -
hour -
min -
sec -
isdst
Für eine zurückgegebene Integer werden ihre Komponenten, zerlegt in UTC, als Zeiten in der angegebenen Zeitzone interpretiert.
Zeitzonennamen
Wenn die Klasse (der Empfänger von Klassenmethoden oder die Klasse des Empfängers von Instanzmethoden) eine Singleton-Methode find_timezone hat, wird diese Methode aufgerufen, um das entsprechende Zeitzonenobjekt aus einem Zeitzonennamen zu erhalten.
Zum Beispiel mit Timezone
class TimeWithTimezone < Time require 'timezone' def self.find_timezone(z) = Timezone[z] end TimeWithTimezone.now(in: "America/New_York") #=> 2023-12-25 00:00:00 -0500 TimeWithTimezone.new("2023-12-25 America/New_York") #=> 2023-12-25 00:00:00 -0500
Oder mit TZInfo
class TimeWithTZInfo < Time require 'tzinfo' def self.find_timezone(z) = TZInfo::Timezone.get(z) end TimeWithTZInfo.now(in: "America/New_York") #=> 2023-12-25 00:00:00 -0500 TimeWithTZInfo.new("2023-12-25 America/New_York") #=> 2023-12-25 00:00:00 -0500
Sie können diese Methode pro Unterklasse definieren oder auf der obersten Ebene der Klasse Time.
Öffentliche Klassenmethoden
Source
# File timev.rb, line 329 def self.at(time, subsec = false, unit = :microsecond, in: nil) if Primitive.mandatory_only? Primitive.time_s_at1(time) else Primitive.time_s_at(time, subsec, unit, Primitive.arg!(:in)) end end
Gibt ein neues Time-Objekt zurück, das auf den gegebenen Argumenten basiert.
Das erforderliche Argument time kann eines von beiden sein:
-
Ein
Time-Objekt, dessen Wert die Grundlage für die zurückgegebene Zeit bildet; beeinflusst auch durch das optionale Schlüsselwortargumentin:(siehe unten). -
Eine numerische Anzahl von Epoch-Sekunden für die zurückgegebene Zeit.
Beispiele
t = Time.new(2000, 12, 31, 23, 59, 59) # => 2000-12-31 23:59:59 -0600 secs = t.to_i # => 978328799 Time.at(secs) # => 2000-12-31 23:59:59 -0600 Time.at(secs + 0.5) # => 2000-12-31 23:59:59.5 -0600 Time.at(1000000000) # => 2001-09-08 20:46:40 -0500 Time.at(0) # => 1969-12-31 18:00:00 -0600 Time.at(-1000000000) # => 1938-04-24 17:13:20 -0500
Das optionale numerische Argument subsec und das optionale Symbolargument units arbeiten zusammen, um Nachkommastellen für die zurückgegebene Zeit anzugeben; das Argument units gibt die Einheiten für subsec an
-
:millisecond:subsecin MillisekundenTime.at(secs, 0, :millisecond) # => 2000-12-31 23:59:59 -0600 Time.at(secs, 500, :millisecond) # => 2000-12-31 23:59:59.5 -0600 Time.at(secs, 1000, :millisecond) # => 2001-01-01 00:00:00 -0600 Time.at(secs, -1000, :millisecond) # => 2000-12-31 23:59:58 -0600
-
:microsecondoder:usec:subsecin MikrosekundenTime.at(secs, 0, :microsecond) # => 2000-12-31 23:59:59 -0600 Time.at(secs, 500000, :microsecond) # => 2000-12-31 23:59:59.5 -0600 Time.at(secs, 1000000, :microsecond) # => 2001-01-01 00:00:00 -0600 Time.at(secs, -1000000, :microsecond) # => 2000-12-31 23:59:58 -0600
-
:nanosecondoder:nsec:subsecin NanosekundenTime.at(secs, 0, :nanosecond) # => 2000-12-31 23:59:59 -0600 Time.at(secs, 500000000, :nanosecond) # => 2000-12-31 23:59:59.5 -0600 Time.at(secs, 1000000000, :nanosecond) # => 2001-01-01 00:00:00 -0600 Time.at(secs, -1000000000, :nanosecond) # => 2000-12-31 23:59:58 -0600
Das optionale Schlüsselwortargument in: zone gibt die Zeitzone für die zurückgegebene Zeit an
Time.at(secs, in: '+12:00') # => 2001-01-01 17:59:59 +1200 Time.at(secs, in: '-12:00') # => 2000-12-31 17:59:59 -1200
Für die Argumentformen von zone siehe Zeitzonenspezifizierer.
Source
# File lib/time.rb, line 572 def httpdate(date) if date.match?(/\A\s* (?:Mon|Tue|Wed|Thu|Fri|Sat|Sun),\x20 (\d{2})\x20 (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\x20 (\d{4})\x20 (\d{2}):(\d{2}):(\d{2})\x20 GMT \s*\z/ix) self.rfc2822(date).utc elsif /\A\s* (?:Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday),\x20 (\d\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d\d)\x20 (\d\d):(\d\d):(\d\d)\x20 GMT \s*\z/ix =~ date year = $3.to_i if year < 50 year += 2000 else year += 1900 end self.utc(year, $2, $1.to_i, $4.to_i, $5.to_i, $6.to_i) elsif /\A\s* (?:Mon|Tue|Wed|Thu|Fri|Sat|Sun)\x20 (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\x20 (\d\d|\x20\d)\x20 (\d\d):(\d\d):(\d\d)\x20 (\d{4}) \s*\z/ix =~ date self.utc($6.to_i, MonthValue[$1.upcase], $2.to_i, $3.to_i, $4.to_i, $5.to_i) else raise ArgumentError.new("not RFC 2616 compliant date: #{date.inspect}") end end
Analysiert date als HTTP-Datum, wie in RFC 2616 definiert, und konvertiert es in ein Time-Objekt.
Es wird ein ArgumentError ausgelöst, wenn date nicht RFC 2616-konform ist oder wenn die Klasse Time das angegebene Datum nicht darstellen kann.
Weitere Informationen zu diesem Format finden Sie unter httpdate.
require 'time' Time.httpdate("Thu, 06 Oct 2011 02:26:12 GMT") #=> 2011-10-06 02:26:12 UTC
Sie müssen 'time' benötigen, um diese Methode zu verwenden.
Source
# File ext/json/lib/json/add/time.rb, line 9 def self.json_create(object) if usec = object.delete('u') # used to be tv_usec -> tv_nsec object['n'] = usec * 1000 end at(object['s'], Rational(object['n'], 1000)) end
Siehe as_json.
Source
static VALUE
time_s_mktime(int argc, VALUE *argv, VALUE klass)
{
struct vtm vtm;
time_arg(argc, argv, &vtm);
return time_localtime(time_new_timew(klass, timelocalw(&vtm)));
}
Ähnlich wie Time.utc, außer dass das zurückgegebene Time-Objekt die lokale Zeitzone und nicht die UTC-Zeitzone hat.
# With seven arguments. Time.local(0, 1, 2, 3, 4, 5, 6) # => 0000-01-02 03:04:05.000006 -0600 # With exactly ten arguments. Time.local(0, 1, 2, 3, 4, 5, 6, 7, 8, 9) # => 0005-04-03 02:01:00 -0600
Source
# File timev.rb, line 440 def initialize(year = (now = true), mon = (str = year; nil), mday = nil, hour = nil, min = nil, sec = nil, zone = nil, in: nil, precision: 9) if zone if Primitive.arg!(:in) raise ArgumentError, "timezone argument given as positional and keyword arguments" end else zone = Primitive.arg!(:in) end if now return Primitive.time_init_now(zone) end if str and Primitive.time_init_parse(str, zone, precision) return self end Primitive.time_init_args(year, mon, mday, hour, min, sec, zone) end
Gibt ein neues Time-Objekt zurück, das auf den gegebenen Argumenten basiert, standardmäßig in der lokalen Zeitzone.
Ohne Positionsargumente wird der Wert von Time.now zurückgegeben.
Time.new # => 2021-04-24 17:27:46.0512465 -0500
Mit einem Zeichenkettenargument, das eine Zeit darstellt, wird ein neues Time-Objekt basierend auf dem gegebenen Argument in der lokalen Zeitzone zurückgegeben.
Time.new('2000-12-31 23:59:59.5') # => 2000-12-31 23:59:59.5 -0600 Time.new('2000-12-31 23:59:59.5 +0900') # => 2000-12-31 23:59:59.5 +0900 Time.new('2000-12-31 23:59:59.5', in: '+0900') # => 2000-12-31 23:59:59.5 +0900 Time.new('2000-12-31 23:59:59.5') # => 2000-12-31 23:59:59.5 -0600 Time.new('2000-12-31 23:59:59.56789', precision: 3) # => 2000-12-31 23:59:59.567 -0600
Mit ein bis sechs Argumenten wird ein neues Time-Objekt basierend auf den gegebenen Argumenten in der lokalen Zeitzone zurückgegeben.
Time.new(2000, 1, 2, 3, 4, 5) # => 2000-01-02 03:04:05 -0600
Für die Positionsargumente (außer zone)
-
year: Jahr, ohne BereichsbeschränkungenTime.new(999999999) # => 999999999-01-01 00:00:00 -0600 Time.new(-999999999) # => -999999999-01-01 00:00:00 -0600
-
month: Monat im Bereich (1..12) oder case-insensitiver 3-buchstabiger MonatsnameTime.new(2000, 1) # => 2000-01-01 00:00:00 -0600 Time.new(2000, 12) # => 2000-12-01 00:00:00 -0600 Time.new(2000, 'jan') # => 2000-01-01 00:00:00 -0600 Time.new(2000, 'JAN') # => 2000-01-01 00:00:00 -0600
-
mday: Tag des Monats im Bereich (1..31)Time.new(2000, 1, 1) # => 2000-01-01 00:00:00 -0600 Time.new(2000, 1, 31) # => 2000-01-31 00:00:00 -0600
-
hour: Stunde im Bereich (0..23) oder 24, wennmin,secundusecNull sindTime.new(2000, 1, 1, 0) # => 2000-01-01 00:00:00 -0600 Time.new(2000, 1, 1, 23) # => 2000-01-01 23:00:00 -0600 Time.new(2000, 1, 1, 24) # => 2000-01-02 00:00:00 -0600
-
min: Minute im Bereich (0..59)Time.new(2000, 1, 1, 0, 0) # => 2000-01-01 00:00:00 -0600 Time.new(2000, 1, 1, 0, 59) # => 2000-01-01 00:59:00 -0600
-
sec: Sekunde im Bereich (0…61)Time.new(2000, 1, 1, 0, 0, 0) # => 2000-01-01 00:00:00 -0600 Time.new(2000, 1, 1, 0, 0, 59) # => 2000-01-01 00:00:59 -0600 Time.new(2000, 1, 1, 0, 0, 60) # => 2000-01-01 00:01:00 -0600
seckann einFloatoderRationalsein.Time.new(2000, 1, 1, 0, 0, 59.5) # => 2000-12-31 23:59:59.5 +0900 Time.new(2000, 1, 1, 0, 0, 59.7r) # => 2000-12-31 23:59:59.7 +0900
Diese Werte können sein
-
Ganzzahlen, wie oben.
-
Numerische Werte, die in Ganzzahlen konvertiert werden können
Time.new(Float(0.0), Rational(1, 1), 1.0, 0.0, 0.0, 0.0) # => 0000-01-01 00:00:00 -0600
-
Ganzzahlige
Stringsa = %w[0 1 1 0 0 0] # => ["0", "1", "1", "0", "0", "0"] Time.new(*a) # => 0000-01-01 00:00:00 -0600
Wenn das Positionsargument zone oder das Schlüsselwortargument in: angegeben wird, befindet sich das neue Time-Objekt in der angegebenen Zeitzone. Für die Formen des Arguments zone siehe Zeitzonenspezifizierer
Time.new(2000, 1, 1, 0, 0, 0, '+12:00') # => 2000-01-01 00:00:00 +1200 Time.new(2000, 1, 1, 0, 0, 0, in: '-12:00') # => 2000-01-01 00:00:00 -1200 Time.new(in: '-12:00') # => 2022-08-23 08:49:26.1941467 -1200
Da in: als Schlüsselwortargument nur den Standardwert liefert, wird dieses Schlüsselwortargument stillschweigend ignoriert, wenn das erste Argument in einer einzelnen Zeichenkettenform Zeitzoneninformationen enthält.
Time.new('2000-01-01 00:00:00 +0100', in: '-0500').utc_offset # => 3600
-
precision: maximale effektive Ziffern im Nachkommastellenbereich, Standard ist 9. Mehr Ziffern werden abgeschnitten, wie auch bei anderen Operationen vonTime. Wird ignoriert, es sei denn, das erste Argument ist eine Zeichenkette.
Source
# File timev.rb, line 270 def self.now(in: nil) Primitive.time_s_now(Primitive.arg!(:in)) end
Erstellt ein neues Time-Objekt aus der aktuellen Systemzeit. Dies ist dasselbe wie Time.new ohne Argumente.
Time.now # => 2009-06-24 12:39:54 +0900 Time.now(in: '+04:00') # => 2009-06-24 07:39:54 +0400
Für die Formen des Arguments zone siehe Zeitzonenspezifizierer.
Source
# File lib/time.rb, line 385 def parse(date, now=self.now) comp = !block_given? d = Date._parse(date, comp) year = d[:year] year = yield(year) if year && !comp make_time(date, year, d[:yday], d[:mon], d[:mday], d[:hour], d[:min], d[:sec], d[:sec_fraction], d[:zone], now) end
Nimmt eine Zeichenfolgendarstellung einer Time entgegen und versucht, sie heuristisch zu parsen.
Diese Methode dient **nicht** als Validator. Wenn die Eingabezeichenkette nicht strikt mit gültigen Formaten übereinstimmt, erhalten Sie möglicherweise ein kryptisches Ergebnis. Sie sollten in Erwägung ziehen, stattdessen Time.strptime zu verwenden.
require 'time' Time.parse("2010-10-31") #=> 2010-10-31 00:00:00 -0500
Fehlende Teile des Datums werden basierend auf dem aktuellen Datum abgeleitet.
require 'time' # assuming the current date is "2011-10-31" Time.parse("12:00") #=> 2011-10-31 12:00:00 -0500
Wir können das Datum, das zur Ableitung fehlender Elemente verwendet wird, ändern, indem wir ein zweites Objekt übergeben, das auf mon, day und year reagiert, wie z. B. Date, Time oder DateTime. Wir können auch unser eigenes Objekt verwenden.
require 'time' class MyDate attr_reader :mon, :day, :year def initialize(mon, day, year) @mon, @day, @year = mon, day, year end end d = Date.parse("2010-10-28") t = Time.parse("2010-10-29") dt = DateTime.parse("2010-10-30") md = MyDate.new(10,31,2010) Time.parse("12:00", d) #=> 2010-10-28 12:00:00 -0500 Time.parse("12:00", t) #=> 2010-10-29 12:00:00 -0500 Time.parse("12:00", dt) #=> 2010-10-30 12:00:00 -0500 Time.parse("12:00", md) #=> 2010-10-31 12:00:00 -0500
Wenn ein Block gegeben ist, wird das in date beschriebene Jahr vom Block konvertiert. Dies ist speziell für die Behandlung von zweistelligen Jahren konzipiert. Wenn Sie beispielsweise alle zweistelligen Jahre vor 70 als das Jahr 2000+ behandeln wollten, könnten Sie dies schreiben
require 'time' Time.parse("01-10-31") {|year| year + (year < 70 ? 2000 : 1900)} #=> 2001-10-31 00:00:00 -0500 Time.parse("70-10-31") {|year| year + (year < 70 ? 2000 : 1900)} #=> 1970-10-31 00:00:00 -0500
Wenn die oberen Komponenten der gegebenen Zeit fehlerhaft oder fehlend sind, werden sie mit denen von now ergänzt. Für die unteren Komponenten werden die Minimalwerte (1 oder 0) angenommen, wenn sie fehlerhaft oder fehlend sind. Zum Beispiel
require 'time' # Suppose it is "Thu Nov 29 14:33:20 2001" now and # your time zone is EST which is GMT-5. now = Time.parse("Thu Nov 29 14:33:20 2001") Time.parse("16:30", now) #=> 2001-11-29 16:30:00 -0500 Time.parse("7/23", now) #=> 2001-07-23 00:00:00 -0500 Time.parse("Aug 31", now) #=> 2001-08-31 00:00:00 -0500 Time.parse("Aug 2000", now) #=> 2000-08-01 00:00:00 -0500
Da es zahlreiche Konflikte bei lokal definierten Zeitzonenabkürzungen auf der ganzen Welt gibt, ist diese Methode nicht dazu gedacht, alle zu verstehen. Zum Beispiel wird die Abkürzung "CST" unterschiedlich verwendet als
-06:00 in America/Chicago, -05:00 in America/Havana, +08:00 in Asia/Harbin, +09:30 in Australia/Darwin, +10:30 in Australia/Adelaide, etc.
Basierend auf dieser Tatsache versteht diese Methode nur die in RFC 822 definierten Zeitzonenabkürzungen und die Systemzeitzone, in der genannten Reihenfolge. (d. h. eine Definition in RFC 822 überschreibt die Systemzeitzonen-Definition.) Die Systemzeitzone wird aus Time.local(year, 1, 1).zone und Time.local(year, 7, 1).zone übernommen. Wenn die extrahierte Zeitzonenabkürzung keiner davon entspricht, wird sie ignoriert und die gegebene Zeit als lokale Zeit betrachtet.
Es wird ein ArgumentError ausgelöst, wenn Date._parse keine Informationen aus date extrahieren kann oder wenn die Klasse Time das angegebene Datum nicht darstellen kann.
Diese Methode kann als Ausfallsicherung für andere Parsing-Methoden verwendet werden, wie
Time.rfc2822(date) rescue Time.parse(date) Time.httpdate(date) rescue Time.parse(date) Time.xmlschema(date) rescue Time.parse(date)
Ein Fehler von Time.parse sollte jedoch überprüft werden.
Sie müssen 'time' benötigen, um diese Methode zu verwenden.
Source
# File lib/time.rb, line 514 def rfc2822(date) if /\A\s* (?:(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun)\s*,\s*)? (\d{1,2})\s+ (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s+ (\d{2,})\s+ (\d{2})\s* :\s*(\d{2}) (?:\s*:\s*(\d\d))?\s+ ([+-]\d{4}| UT|GMT|EST|EDT|CST|CDT|MST|MDT|PST|PDT|[A-IK-Z])/ix =~ date # Since RFC 2822 permit comments, the regexp has no right anchor. day = $1.to_i mon = MonthValue[$2.upcase] year = $3.to_i short_year_p = $3.length <= 3 hour = $4.to_i min = $5.to_i sec = $6 ? $6.to_i : 0 zone = $7 if short_year_p # following year completion is compliant with RFC 2822. year = if year < 50 2000 + year else 1900 + year end end off = zone_offset(zone) year, mon, day, hour, min, sec = apply_offset(year, mon, day, hour, min, sec, off) t = self.utc(year, mon, day, hour, min, sec) force_zone!(t, zone, off) t else raise ArgumentError.new("not RFC 2822 compliant date: #{date.inspect}") end end
Analysiert date als Datum und Uhrzeit gemäß RFC 2822 und konvertiert es in ein Time-Objekt. Das Format ist identisch mit dem Datumsformat, das in RFC 822 definiert und durch RFC 1123 aktualisiert wurde.
Es wird ein ArgumentError ausgelöst, wenn date nicht RFC 2822-konform ist oder wenn die Klasse Time das angegebene Datum nicht darstellen kann.
Weitere Informationen zu diesem Format finden Sie unter rfc2822.
require 'time' Time.rfc2822("Wed, 05 Oct 2011 22:26:12 -0400") #=> 2010-10-05 22:26:12 -0400
Sie müssen 'time' benötigen, um diese Methode zu verwenden.
Source
# File lib/time.rb, line 462 def strptime(date, format, now=self.now) d = Date._strptime(date, format) raise ArgumentError, "invalid date or strptime format - '#{date}' '#{format}'" unless d if seconds = d[:seconds] if sec_fraction = d[:sec_fraction] usec = sec_fraction * 1000000 usec *= -1 if seconds < 0 else usec = 0 end t = Time.at(seconds, usec) if zone = d[:zone] force_zone!(t, zone) end else year = d[:year] year = yield(year) if year && block_given? yday = d[:yday] if (d[:cwyear] && !year) || ((d[:cwday] || d[:cweek]) && !(d[:mon] && d[:mday])) # make_time doesn't deal with cwyear/cwday/cweek return Date.strptime(date, format).to_time end if (d[:wnum0] || d[:wnum1]) && !yday && !(d[:mon] && d[:mday]) yday = Date.strptime(date, format).yday end t = make_time(date, year, yday, d[:mon], d[:mday], d[:hour], d[:min], d[:sec], d[:sec_fraction], d[:zone], now) end t end
Funktioniert ähnlich wie parse, außer dass Sie anstelle der Verwendung einer Heuristik zur Erkennung des Formats der Eingabezeichenkette ein zweites Argument bereitstellen, das das Format der Zeichenkette beschreibt.
Löst ArgumentError aus, wenn das Datum oder Format ungültig ist.
Wenn ein Block gegeben ist, wird das in date beschriebene Jahr vom Block konvertiert. Zum Beispiel
Time.strptime(...) {|y| y < 100 ? (y >= 69 ? y + 1900 : y + 2000) : y}
Nachfolgend finden Sie eine Liste der Formatierungsoptionen
- %a
-
Der abgekürzte Wochentagsname ("Sun")
- %A
-
Der vollständige Wochentagsname ("Sunday")
- %b
-
Der abgekürzte Monatsname ("Jan")
- %B
-
Der vollständige Monatsname ("January")
- %c
-
Die bevorzugte lokale Darstellung von Datum und Uhrzeit
- %C
-
Jahrhundert (20 in 2009)
- %d
-
Tag des Monats (01..31)
- %D
-
Datum (%m/%d/%y)
- %e
-
Tag des Monats, mit Leerzeichen aufgefüllt ( 1..31)
- %F
-
Äquivalent zu %Y-%m-%d (das ISO 8601 Datumsformat)
- %g
-
Die letzten beiden Ziffern des kommerziellen Jahres
- %G
-
Das wochenbasierte Jahr gemäß ISO-8601 (Woche 1 beginnt am Montag und enthält den 4. Januar)
- %h
-
Äquivalent zu %b
- %H
-
Stunde des Tages, 24-Stunden-Format (00..23)
- %I
-
Stunde des Tages, 12-Stunden-Format (01..12)
- %j
-
Tag des Jahres (001..366)
- %k
-
Stunde, 24-Stunden-Format, mit Leerzeichen aufgefüllt ( 0..23)
- %l
-
Stunde, 12-Stunden-Format, mit Leerzeichen aufgefüllt ( 0..12)
- %L
-
Millisekunde der Sekunde (000..999)
- %m
-
Monat des Jahres (01..12)
- %M
-
Minute der Stunde (00..59)
- %n
-
Neue Zeile (n)
- %N
-
Nachkommastellen
- %p
-
Meridian-Indikator ("AM" oder "PM")
- %P
-
Meridian-Indikator ("am" oder "pm")
- %r
-
Uhrzeit, 12-Stunden (identisch mit %I:%M:%S %p)
- %R
-
Uhrzeit, 24-Stunden (%H:%M)
- %s
-
Anzahl der Sekunden seit 1970-01-01 00:00:00 UTC.
- %S
-
Sekunde der Minute (00..60)
- %t
-
Tabulatorzeichen (t)
- %T
-
Uhrzeit, 24-Stunden (%H:%M:%S)
- %u
-
Wochentag als Dezimalzahl, Montag ist 1. (1..7)
- %U
-
Wochennummer des aktuellen Jahres, beginnend mit dem ersten Sonntag als erstem Tag der ersten Woche (00..53)
- %v
-
VMS-Datum (%e-%b-%Y)
- %V
-
Wochennummer des Jahres gemäß ISO 8601 (01..53)
- %W
-
Wochennummer des aktuellen Jahres, beginnend mit dem ersten Montag als erstem Tag der ersten Woche (00..53)
- %w
-
Wochentag (Sonntag ist 0, 0..6)
- %x
-
Bevorzugte Darstellung für das Datum allein, keine Uhrzeit
- %X
-
Bevorzugte Darstellung für die Uhrzeit allein, kein Datum
- %y
-
Jahr ohne Jahrhundert (00..99)
- %Y
-
Jahr, das das Jahrhundert enthalten kann, wenn angegeben
- %z
-
Zeitzone als Stunden-Offset von UTC (z. B. +0900)
- %Z
-
Zeitzonenname
- %%
-
Literal " %"-Zeichen
- %+
-
date(1) (%a %b %e %H:%M:%S %Z %Y)
require 'time' Time.strptime("2000-10-31", "%Y-%m-%d") #=> 2000-10-31 00:00:00 -0500
Sie müssen 'time' benötigen, um diese Methode zu verwenden.
Source
static VALUE
time_s_mkutc(int argc, VALUE *argv, VALUE klass)
{
struct vtm vtm;
time_arg(argc, argv, &vtm);
return time_gmtime(time_new_timew(klass, timegmw(&vtm)));
}
Gibt ein neues Time-Objekt zurück, das auf den gegebenen Argumenten basiert und sich in der UTC-Zeitzone befindet.
Wenn ein bis sieben Argumente angegeben werden, werden die Argumente wie in der ersten Aufrufsequenz oben interpretiert
Time.utc(year, month = 1, mday = 1, hour = 0, min = 0, sec = 0, usec = 0)
Beispiele
Time.utc(2000) # => 2000-01-01 00:00:00 UTC Time.utc(-2000) # => -2000-01-01 00:00:00 UTC
Es gibt keine minimalen und maximalen Werte für das erforderliche Argument year.
Für die optionalen Argumente
-
month: Monat im Bereich (1..12) oder case-insensitiver 3-buchstabiger MonatsnameTime.utc(2000, 1) # => 2000-01-01 00:00:00 UTC Time.utc(2000, 12) # => 2000-12-01 00:00:00 UTC Time.utc(2000, 'jan') # => 2000-01-01 00:00:00 UTC Time.utc(2000, 'JAN') # => 2000-01-01 00:00:00 UTC
-
mday: Tag des Monats im Bereich (1..31)Time.utc(2000, 1, 1) # => 2000-01-01 00:00:00 UTC Time.utc(2000, 1, 31) # => 2000-01-31 00:00:00 UTC
-
hour: Stunde im Bereich (0..23) oder 24, wennmin,secundusecNull sindTime.utc(2000, 1, 1, 0) # => 2000-01-01 00:00:00 UTC Time.utc(2000, 1, 1, 23) # => 2000-01-01 23:00:00 UTC Time.utc(2000, 1, 1, 24) # => 2000-01-02 00:00:00 UTC
-
min: Minute im Bereich (0..59)Time.utc(2000, 1, 1, 0, 0) # => 2000-01-01 00:00:00 UTC Time.utc(2000, 1, 1, 0, 59) # => 2000-01-01 00:59:00 UTC
-
sec: Sekunde im Bereich (0..59) oder 60, wennusecNull istTime.utc(2000, 1, 1, 0, 0, 0) # => 2000-01-01 00:00:00 UTC Time.utc(2000, 1, 1, 0, 0, 59) # => 2000-01-01 00:00:59 UTC Time.utc(2000, 1, 1, 0, 0, 60) # => 2000-01-01 00:01:00 UTC
-
usec: Mikrosekunde im Bereich (0..999999)Time.utc(2000, 1, 1, 0, 0, 0, 0) # => 2000-01-01 00:00:00 UTC Time.utc(2000, 1, 1, 0, 0, 0, 999999) # => 2000-01-01 00:00:00.999999 UTC
Die Werte können
-
Ganzzahlen, wie oben.
-
Numerische Werte, die in Ganzzahlen konvertiert werden können
Time.utc(Float(0.0), Rational(1, 1), 1.0, 0.0, 0.0, 0.0, 0.0) # => 0000-01-01 00:00:00 UTC
-
Ganzzahlige
Stringsa = %w[0 1 1 0 0 0 0 0] # => ["0", "1", "1", "0", "0", "0", "0", "0"] Time.utc(*a) # => 0000-01-01 00:00:00 UTC
Wenn genau zehn Argumente gegeben sind, werden die Argumente wie in der zweiten oben genannten Aufrufsequenz interpretiert
Time.utc(sec, min, hour, mday, month, year, dummy, dummy, dummy, dummy)
wobei die dummy-Argumente ignoriert werden
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] Time.utc(*a) # => 0005-04-03 02:01:00 UTC
Diese Form ist nützlich zum Erstellen eines Time-Objekts aus einem 10-Elemente-Array, das von Time.to_a zurückgegeben wird
t = Time.new(2000, 1, 2, 3, 4, 5, 6) # => 2000-01-02 03:04:05 +000006 a = t.to_a # => [5, 4, 3, 2, 1, 2000, 0, 2, false, nil] Time.utc(*a) # => 2000-01-02 03:04:05 UTC
Die beiden Formen haben ihre ersten sechs Argumente gemeinsam, wenn auch in unterschiedlicher Reihenfolge; die Bereiche dieser gemeinsamen Argumente sind für beide Formen gleich; siehe oben.
Löst eine Ausnahme aus, wenn die Anzahl der Argumente acht, neun oder größer als zehn ist.
Verwandt: Time.local.
Source
# File lib/time.rb, line 626 def xmlschema(time) if /\A\s* (-?\d+)-(\d\d)-(\d\d) T (\d\d):(\d\d):(\d\d) (\.\d+)? (Z|[+-]\d\d(?::?\d\d)?)? \s*\z/ix =~ time year = $1.to_i mon = $2.to_i day = $3.to_i hour = $4.to_i min = $5.to_i sec = $6.to_i usec = 0 if $7 usec = Rational($7) * 1000000 end if $8 zone = $8 off = zone_offset(zone) year, mon, day, hour, min, sec = apply_offset(year, mon, day, hour, min, sec, off) t = self.utc(year, mon, day, hour, min, sec, usec) force_zone!(t, zone, off) t else self.local(year, mon, day, hour, min, sec, usec) end else raise ArgumentError.new("invalid xmlschema format: #{time.inspect}") end end
Parst time als dateTime, das durch das XML-Schema definiert ist, und konvertiert es in ein Time-Objekt. Das Format ist eine eingeschränkte Version des Formats, das durch ISO 8601 definiert ist.
ArgumentError wird ausgelöst, wenn time nicht dem Format entspricht oder wenn die Time-Klasse die angegebene Zeit nicht darstellen kann.
Siehe xmlschema für weitere Informationen zu diesem Format.
require 'time' Time.xmlschema("2011-10-05T22:26:12-04:00") #=> 2011-10-05 22:26:12-04:00
Sie müssen 'time' benötigen, um diese Methode zu verwenden.
Source
# File lib/time.rb, line 83 def zone_offset(zone, year=nil) off = nil zone = zone.upcase if /\A([+-])(\d\d)(:?)(\d\d)(?:\3(\d\d))?\z/ =~ zone off = ($1 == '-' ? -1 : 1) * (($2.to_i * 60 + $4.to_i) * 60 + $5.to_i) elsif zone.match?(/\A[+-]\d\d\z/) off = zone.to_i * 3600 elsif ZoneOffset.include?(zone) off = ZoneOffset[zone] * 3600 else year ||= self.now.year if ((t = self.local(year, 1, 1)).zone.upcase == zone rescue false) off = t.utc_offset elsif ((t = self.local(year, 7, 1)).zone.upcase == zone rescue false) off = t.utc_offset end end off end
Gibt die Anzahl der Sekunden zurück, um die sich die angegebene Zeitzone von UTC unterscheidet.
Numeric-Zeitzonen, die Minuten enthalten, wie z. B. -10:00 oder +1330, funktionieren genauso wie einfachere, nur Stunden umfassende Zeitzonen wie -10 oder +13.
Textuelle Zeitzonen, die in ZoneOffset aufgeführt sind, werden ebenfalls unterstützt.
Wenn die Zeitzone keiner der oben genannten entspricht, prüft zone_offset, ob die lokale Zeitzone (sowohl mit als auch ohne mögliche Änderungen durch Sommerzeit) mit zone übereinstimmt. Die Angabe eines Wertes für year ändert das Jahr, das zur Ermittlung der lokalen Zeitzone verwendet wird.
Wenn zone_offset den Offset nicht ermitteln kann, wird nil zurückgegeben.
require 'time' Time.zone_offset("EST") #=> -18000
Sie müssen 'time' benötigen, um diese Methode zu verwenden.
Öffentliche Instanzmethoden
Source
static VALUE
time_plus(VALUE time1, VALUE time2)
{
struct time_object *tobj;
GetTimeval(time1, tobj);
if (IsTimeval(time2)) {
rb_raise(rb_eTypeError, "time + time?");
}
return time_add(tobj, time1, time2, 1);
}
Source
static VALUE
time_minus(VALUE time1, VALUE time2)
{
struct time_object *tobj;
GetTimeval(time1, tobj);
if (IsTimeval(time2)) {
struct time_object *tobj2;
GetTimeval(time2, tobj2);
return rb_Float(rb_time_unmagnify_to_float(wsub(tobj->timew, tobj2->timew)));
}
return time_add(tobj, time1, time2, -1);
}
Wenn numeric gegeben ist, wird ein neues Time-Objekt zurückgegeben, dessen Wert die Differenz des numerischen Wertes von self und numeric ist
t = Time.new(2000) # => 2000-01-01 00:00:00 -0600 t - (60 * 60 * 24) # => 1999-12-31 00:00:00 -0600 t - 0.5 # => 1999-12-31 23:59:59.5 -0600
Wenn other_time gegeben ist, wird ein Float zurückgegeben, dessen Wert die Differenz der numerischen Werte von self und other_time in Sekunden ist
t - t # => 0.0
Verwandt: Time#+.
Source
static VALUE
time_cmp(VALUE time1, VALUE time2)
{
struct time_object *tobj1, *tobj2;
int n;
GetTimeval(time1, tobj1);
if (IsTimeval(time2)) {
GetTimeval(time2, tobj2);
n = wcmp(tobj1->timew, tobj2->timew);
}
else {
return rb_invcmp(time1, time2);
}
if (n == 0) return INT2FIX(0);
if (n > 0) return INT2FIX(1);
return INT2FIX(-1);
}
Vergleicht self mit other_time; gibt zurück
-
-1, wennselfkleiner alsother_timeist. -
0, wennselfgleichother_timeist. -
1, wennselfgrößer alsother_timeist. -
nil, wennselfundother_timenicht vergleichbar sind.
Beispiele
t = Time.now # => 2007-11-19 08:12:12 -0600 t2 = t + 2592000 # => 2007-12-19 08:12:12 -0600 t <=> t2 # => -1 t2 <=> t # => 1 t = Time.now # => 2007-11-19 08:13:38 -0600 t2 = t + 0.1 # => 2007-11-19 08:13:38 -0600 t.nsec # => 98222999 t2.nsec # => 198222999 t <=> t2 # => -1 t2 <=> t # => 1 t <=> t # => 0
Source
# File ext/json/lib/json/add/time.rb, line 32 def as_json(*) { JSON.create_id => self.class.name, 's' => tv_sec, 'n' => tv_nsec, } end
Die Methoden Time#as_json und Time.json_create können verwendet werden, um ein Time-Objekt zu serialisieren und zu deserialisieren; siehe Marshal.
Die Methode Time#as_json serialisiert self und gibt einen 2-Elemente-Hash zurück, der self repräsentiert
require 'json/add/time' x = Time.now.as_json # => {"json_class"=>"Time", "s"=>1700931656, "n"=>472846644}
Die Methode JSON.create deserialisiert einen solchen Hash und gibt ein Time-Objekt zurück
Time.json_create(x) # => 2023-11-25 11:00:56.472846644 -0600
Source
static VALUE
time_ceil(int argc, VALUE *argv, VALUE time)
{
VALUE ndigits, v, den;
struct time_object *tobj;
if (!rb_check_arity(argc, 0, 1) || NIL_P(ndigits = argv[0]))
den = INT2FIX(1);
else
den = ndigits_denominator(ndigits);
GetTimeval(time, tobj);
v = w2v(rb_time_unmagnify(tobj->timew));
v = modv(v, den);
if (!rb_equal(v, INT2FIX(0))) {
v = subv(den, v);
}
return time_add(tobj, time, v, 1);
}
Gibt ein neues Time-Objekt zurück, dessen numerischer Wert größer oder gleich self ist, wobei die Sekunden auf die Präzision ndigits gekürzt werden
t = Time.utc(2010, 3, 30, 5, 43, 25.123456789r) t # => 2010-03-30 05:43:25.123456789 UTC t.ceil # => 2010-03-30 05:43:26 UTC t.ceil(2) # => 2010-03-30 05:43:25.13 UTC t.ceil(4) # => 2010-03-30 05:43:25.1235 UTC t.ceil(6) # => 2010-03-30 05:43:25.123457 UTC t.ceil(8) # => 2010-03-30 05:43:25.12345679 UTC t.ceil(10) # => 2010-03-30 05:43:25.123456789 UTC t = Time.utc(1999, 12, 31, 23, 59, 59) t # => 1999-12-31 23:59:59 UTC (t + 0.4).ceil # => 2000-01-01 00:00:00 UTC (t + 0.9).ceil # => 2000-01-01 00:00:00 UTC (t + 1.4).ceil # => 2000-01-01 00:00:01 UTC (t + 1.9).ceil # => 2000-01-01 00:00:01 UTC
Verwandt: Time#floor, Time#round.
Source
static VALUE
time_asctime(VALUE time)
{
return strftimev("%a %b %e %T %Y", time, rb_usascii_encoding());
}
Gibt eine Zeichenkettenrepräsentation von self zurück, formatiert durch strftime('%a %b %e %T %Y') oder seine Kurzform strftime('%c'); siehe Formate für Daten und Zeiten
t = Time.new(2000, 12, 31, 23, 59, 59, 0.5) t.ctime # => "Sun Dec 31 23:59:59 2000" t.strftime('%a %b %e %T %Y') # => "Sun Dec 31 23:59:59 2000" t.strftime('%c') # => "Sun Dec 31 23:59:59 2000"
Verwandt: Time#to_s, Time#inspect
t.inspect # => "2000-12-31 23:59:59.5 +000001" t.to_s # => "2000-12-31 23:59:59 +0000"
Source
static VALUE
time_deconstruct_keys(VALUE time, VALUE keys)
{
struct time_object *tobj;
VALUE h;
long i;
GetTimeval(time, tobj);
MAKE_TM_ENSURE(time, tobj, tobj->vtm.yday != 0);
if (NIL_P(keys)) {
h = rb_hash_new_with_size(11);
rb_hash_aset(h, sym_year, tobj->vtm.year);
rb_hash_aset(h, sym_month, INT2FIX(tobj->vtm.mon));
rb_hash_aset(h, sym_day, INT2FIX(tobj->vtm.mday));
rb_hash_aset(h, sym_yday, INT2FIX(tobj->vtm.yday));
rb_hash_aset(h, sym_wday, INT2FIX(tobj->vtm.wday));
rb_hash_aset(h, sym_hour, INT2FIX(tobj->vtm.hour));
rb_hash_aset(h, sym_min, INT2FIX(tobj->vtm.min));
rb_hash_aset(h, sym_sec, INT2FIX(tobj->vtm.sec));
rb_hash_aset(h, sym_subsec,
quov(w2v(wmod(tobj->timew, WINT2FIXWV(TIME_SCALE))), INT2FIX(TIME_SCALE)));
rb_hash_aset(h, sym_dst, RBOOL(tobj->vtm.isdst));
rb_hash_aset(h, sym_zone, time_zone(time));
return h;
}
if (UNLIKELY(!RB_TYPE_P(keys, T_ARRAY))) {
rb_raise(rb_eTypeError,
"wrong argument type %"PRIsVALUE" (expected Array or nil)",
rb_obj_class(keys));
}
h = rb_hash_new_with_size(RARRAY_LEN(keys));
for (i=0; i<RARRAY_LEN(keys); i++) {
VALUE key = RARRAY_AREF(keys, i);
if (sym_year == key) rb_hash_aset(h, key, tobj->vtm.year);
if (sym_month == key) rb_hash_aset(h, key, INT2FIX(tobj->vtm.mon));
if (sym_day == key) rb_hash_aset(h, key, INT2FIX(tobj->vtm.mday));
if (sym_yday == key) rb_hash_aset(h, key, INT2FIX(tobj->vtm.yday));
if (sym_wday == key) rb_hash_aset(h, key, INT2FIX(tobj->vtm.wday));
if (sym_hour == key) rb_hash_aset(h, key, INT2FIX(tobj->vtm.hour));
if (sym_min == key) rb_hash_aset(h, key, INT2FIX(tobj->vtm.min));
if (sym_sec == key) rb_hash_aset(h, key, INT2FIX(tobj->vtm.sec));
if (sym_subsec == key) {
rb_hash_aset(h, key, quov(w2v(wmod(tobj->timew, WINT2FIXWV(TIME_SCALE))), INT2FIX(TIME_SCALE)));
}
if (sym_dst == key) rb_hash_aset(h, key, RBOOL(tobj->vtm.isdst));
if (sym_zone == key) rb_hash_aset(h, key, time_zone(time));
}
return h;
}
Gibt einen Hash der Namens/Wert-Paare zurück, der für Mustervergleiche verwendet werden kann. Mögliche Schlüssel sind: :year, :month, :day, :yday, :wday, :hour, :min, :sec, :subsec, :dst, :zone.
Mögliche Verwendungen
t = Time.utc(2022, 10, 5, 21, 25, 30) if t in wday: 3, day: ..7 # uses deconstruct_keys underneath puts "first Wednesday of the month" end #=> prints "first Wednesday of the month" case t in year: ...2022 puts "too old" in month: ..9 puts "quarter 1-3" in wday: 1..5, month: puts "working day in month #{month}" end #=> prints "working day in month 10"
Beachten Sie, dass die Dekonstruktion per Muster auch mit Klassenprüfungen kombiniert werden kann.
if t in Time(wday: 3, day: ..7) puts "first Wednesday of the month" end
Gibt true zurück, wenn sich self in der Sommerzeit befindet, andernfalls false
t = Time.local(2000, 1, 1) # => 2000-01-01 00:00:00 -0600 t.zone # => "Central Standard Time" t.dst? # => false t = Time.local(2000, 7, 1) # => 2000-07-01 00:00:00 -0500 t.zone # => "Central Daylight Time" t.dst? # => true
Source
static VALUE
time_eql(VALUE time1, VALUE time2)
{
struct time_object *tobj1, *tobj2;
GetTimeval(time1, tobj1);
if (IsTimeval(time2)) {
GetTimeval(time2, tobj2);
return rb_equal(w2v(tobj1->timew), w2v(tobj2->timew));
}
return Qfalse;
}
Gibt true zurück, wenn self und other_time beides Time-Objekte mit exakt demselben Zeitwert sind.
Source
static VALUE
time_floor(int argc, VALUE *argv, VALUE time)
{
VALUE ndigits, v, den;
struct time_object *tobj;
if (!rb_check_arity(argc, 0, 1) || NIL_P(ndigits = argv[0]))
den = INT2FIX(1);
else
den = ndigits_denominator(ndigits);
GetTimeval(time, tobj);
v = w2v(rb_time_unmagnify(tobj->timew));
v = modv(v, den);
return time_add(tobj, time, v, -1);
}
Gibt ein neues Time-Objekt zurück, dessen numerischer Wert kleiner oder gleich self ist, wobei die Sekunden auf die Präzision ndigits gekürzt werden
t = Time.utc(2010, 3, 30, 5, 43, 25.123456789r) t # => 2010-03-30 05:43:25.123456789 UTC t.floor # => 2010-03-30 05:43:25 UTC t.floor(2) # => 2010-03-30 05:43:25.12 UTC t.floor(4) # => 2010-03-30 05:43:25.1234 UTC t.floor(6) # => 2010-03-30 05:43:25.123456 UTC t.floor(8) # => 2010-03-30 05:43:25.12345678 UTC t.floor(10) # => 2010-03-30 05:43:25.123456789 UTC t = Time.utc(1999, 12, 31, 23, 59, 59) t # => 1999-12-31 23:59:59 UTC (t + 0.4).floor # => 1999-12-31 23:59:59 UTC (t + 0.9).floor # => 1999-12-31 23:59:59 UTC (t + 1.4).floor # => 2000-01-01 00:00:00 UTC (t + 1.9).floor # => 2000-01-01 00:00:00 UTC
Verwandt: Time#ceil, Time#round.
Source
static VALUE
time_friday(VALUE time)
{
wday_p(5);
}
Gibt true zurück, wenn self einen Freitag repräsentiert, andernfalls false
t = Time.utc(2000, 1, 7) # => 2000-01-07 00:00:00 UTC t.friday? # => true
Verwandt: Time#saturday?, Time#sunday?, Time#monday?.
Source
static VALUE
time_getgmtime(VALUE time)
{
return time_gmtime(time_dup(time));
}
Source
static VALUE
time_getlocaltime(int argc, VALUE *argv, VALUE time)
{
VALUE off;
if (rb_check_arity(argc, 0, 1) && !NIL_P(off = argv[0])) {
VALUE zone = off;
if (maybe_tzobj_p(zone)) {
VALUE t = time_dup(time);
if (zone_localtime(off, t)) return t;
}
if (NIL_P(off = utc_offset_arg(off))) {
off = zone;
if (NIL_P(zone = find_timezone(time, off))) invalid_utc_offset(off);
time = time_dup(time);
if (!zone_localtime(zone, time)) invalid_utc_offset(off);
return time;
}
else if (off == UTC_ZONE) {
return time_gmtime(time_dup(time));
}
validate_utc_offset(off);
time = time_dup(time);
time_set_utc_offset(time, off);
return time_fixoff(time);
}
return time_localtime(time_dup(time));
}
Gibt ein neues Time-Objekt zurück, das den Wert von self repräsentiert, konvertiert in eine gegebene Zeitzone; wenn zone nil ist, wird die lokale Zeitzone verwendet
t = Time.utc(2000) # => 2000-01-01 00:00:00 UTC t.getlocal # => 1999-12-31 18:00:00 -0600 t.getlocal('+12:00') # => 2000-01-01 12:00:00 +1200
Für die Formen des Arguments zone siehe Zeitzonenspezifizierer.
Gibt ein neues Time-Objekt zurück, das den Wert von self repräsentiert, konvertiert in die UTC-Zeitzone
local = Time.local(2000) # => 2000-01-01 00:00:00 -0600 local.utc? # => false utc = local.getutc # => 2000-01-01 06:00:00 UTC utc.utc? # => true utc == local # => true
Source
static VALUE
time_gmtime(VALUE time)
{
struct time_object *tobj;
struct vtm vtm;
GetTimeval(time, tobj);
if (TZMODE_UTC_P(tobj)) {
if (tobj->vtm.tm_got)
return time;
}
else {
time_modify(time);
}
vtm.zone = str_utc;
GMTIMEW(tobj->timew, &vtm);
time_set_vtm(time, tobj, vtm);
tobj->vtm.tm_got = 1;
TZMODE_SET_UTC(tobj);
return time;
}
Source
VALUE
rb_time_utc_offset(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
if (TZMODE_UTC_P(tobj)) {
return INT2FIX(0);
}
else {
MAKE_TM(time, tobj);
return tobj->vtm.utc_offset;
}
}
Source
static VALUE
time_hash(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
return rb_hash(w2v(tobj->timew));
}
Gibt den ganzzahligen Hash-Code für self zurück.
Verwandt: Object#hash.
Source
static VALUE
time_hour(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
MAKE_TM(time, tobj);
return INT2FIX(tobj->vtm.hour);
}
Source
# File lib/time.rb, line 698 def httpdate getutc.strftime('%a, %d %b %Y %T GMT') end
Gibt eine Zeichenkette zurück, die die Zeit als RFC 1123-Datum von HTTP-date gemäß RFC 2616 darstellt
day-of-week, DD month-name CCYY hh:mm:ss GMT
Beachten Sie, dass das Ergebnis immer UTC (GMT) ist.
require 'time' t = Time.now t.httpdate # => "Thu, 06 Oct 2011 02:26:12 GMT"
Sie müssen 'time' benötigen, um diese Methode zu verwenden.
Source
static VALUE
time_inspect(VALUE time)
{
struct time_object *tobj;
VALUE str, subsec;
GetTimeval(time, tobj);
str = strftimev("%Y-%m-%d %H:%M:%S", time, rb_usascii_encoding());
subsec = w2v(wmod(tobj->timew, WINT2FIXWV(TIME_SCALE)));
if (subsec == INT2FIX(0)) {
}
else if (FIXNUM_P(subsec) && FIX2LONG(subsec) < TIME_SCALE) {
long len;
rb_str_catf(str, ".%09ld", FIX2LONG(subsec));
for (len=RSTRING_LEN(str); RSTRING_PTR(str)[len-1] == '0' && len > 0; len--)
;
rb_str_resize(str, len);
}
else {
rb_str_cat_cstr(str, " ");
subsec = quov(subsec, INT2FIX(TIME_SCALE));
rb_str_concat(str, rb_obj_as_string(subsec));
}
if (TZMODE_UTC_P(tobj)) {
rb_str_cat_cstr(str, " UTC");
}
else {
/* ?TODO: subsecond offset */
long off = NUM2LONG(rb_funcall(tobj->vtm.utc_offset, rb_intern("round"), 0));
char sign = (off < 0) ? (off = -off, '-') : '+';
int sec = off % 60;
int min = (off /= 60) % 60;
off /= 60;
rb_str_catf(str, " %c%.2d%.2d", sign, (int)off, min);
if (sec) rb_str_catf(str, "%.2d", sec);
}
return str;
}
Gibt eine Zeichenkettenrepräsentation von self mit Subsekunden zurück
t = Time.new(2000, 12, 31, 23, 59, 59, 0.5) t.inspect # => "2000-12-31 23:59:59.5 +000001"
Verwandt: Time#ctime, Time#to_s
t.ctime # => "Sun Dec 31 23:59:59 2000" t.to_s # => "2000-12-31 23:59:59 +0000"
Source
static VALUE
time_isdst(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
MAKE_TM(time, tobj);
if (tobj->vtm.isdst == VTM_ISDST_INITVAL) {
rb_raise(rb_eRuntimeError, "isdst is not set yet");
}
return RBOOL(tobj->vtm.isdst);
}
Parst time als dateTime, das durch das XML-Schema definiert ist, und konvertiert es in ein Time-Objekt. Das Format ist eine eingeschränkte Version des Formats, das durch ISO 8601 definiert ist.
ArgumentError wird ausgelöst, wenn time nicht dem Format entspricht oder wenn die Time-Klasse die angegebene Zeit nicht darstellen kann.
Siehe xmlschema für weitere Informationen zu diesem Format.
require 'time' Time.xmlschema("2011-10-05T22:26:12-04:00") #=> 2011-10-05 22:26:12-04:00
Sie müssen 'time' benötigen, um diese Methode zu verwenden.
Source
static VALUE
time_localtime_m(int argc, VALUE *argv, VALUE time)
{
VALUE off;
if (rb_check_arity(argc, 0, 1) && !NIL_P(off = argv[0])) {
return time_zonelocal(time, off);
}
return time_localtime(time);
}
Ohne Argument
-
Gibt
selfzurück, wennselfeine lokale Zeit ist. -
Andernfalls wird ein neues
Time-Objekt in der lokalen Zeitzone des Benutzers zurückgegebent = Time.utc(2000, 1, 1, 20, 15, 1) # => 2000-01-01 20:15:01 UTC t.localtime # => 2000-01-01 14:15:01 -0600
Mit dem Argument zone wird das neue Time-Objekt zurückgegeben, das durch Konvertierung von self in die gegebene Zeitzone erstellt wird
t = Time.utc(2000, 1, 1, 20, 15, 1) # => 2000-01-01 20:15:01 UTC t.localtime("-09:00") # => 2000-01-01 11:15:01 -0900
Für die Formen des Arguments zone siehe Zeitzonenspezifizierer.
Source
static VALUE
time_mday(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
MAKE_TM(time, tobj);
return INT2FIX(tobj->vtm.mday);
}
Gibt den ganzzahligen Tag des Monats für self zurück, im Bereich (1..31)
t = Time.new(2000, 1, 2, 3, 4, 5, 6) # => 2000-01-02 03:04:05 +000006 t.mday # => 2
Source
static VALUE
time_min(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
MAKE_TM(time, tobj);
return INT2FIX(tobj->vtm.min);
}
Source
static VALUE
time_mon(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
MAKE_TM(time, tobj);
return INT2FIX(tobj->vtm.mon);
}
Gibt den ganzzahligen Monat des Jahres für self zurück, im Bereich (1..12)
t = Time.new(2000, 1, 2, 3, 4, 5, 6) # => 2000-01-02 03:04:05 +000006 t.mon # => 1
Source
static VALUE
time_monday(VALUE time)
{
wday_p(1);
}
Gibt true zurück, wenn self einen Montag repräsentiert, andernfalls false
t = Time.utc(2000, 1, 3) # => 2000-01-03 00:00:00 UTC t.monday? # => true
Verwandt: Time#tuesday?, Time#wednesday?, Time#thursday?.
Gibt die Anzahl der Nanosekunden im Nachkommateil von self im Bereich (0..999_999_999) zurück; niedrigere Stellen werden abgeschnitten, nicht gerundet
t = Time.now # => 2022-07-11 15:04:53.3219637 -0500 t.nsec # => 321963700
Verwandt: Time#subsec (gibt exakte Nachkommastellen zurück).
Source
# File lib/time.rb, line 678 def rfc2822 strftime('%a, %d %b %Y %T ') << (utc? ? '-0000' : strftime('%z')) end
Gibt eine Zeichenkette zurück, die die Zeit als Datum und Uhrzeit gemäß RFC 2822 darstellt
day-of-week, DD month-name CCYY hh:mm:ss zone
wobei zone [+-]hhmm ist.
Wenn self eine UTC-Zeit ist, wird -0000 als Zone verwendet.
require 'time' t = Time.now t.rfc2822 # => "Wed, 05 Oct 2011 22:26:12 -0400"
Sie müssen 'time' benötigen, um diese Methode zu verwenden.
Source
static VALUE
time_round(int argc, VALUE *argv, VALUE time)
{
VALUE ndigits, v, den;
struct time_object *tobj;
if (!rb_check_arity(argc, 0, 1) || NIL_P(ndigits = argv[0]))
den = INT2FIX(1);
else
den = ndigits_denominator(ndigits);
GetTimeval(time, tobj);
v = w2v(rb_time_unmagnify(tobj->timew));
v = modv(v, den);
if (lt(v, quov(den, INT2FIX(2))))
return time_add(tobj, time, v, -1);
else
return time_add(tobj, time, subv(den, v), 1);
}
Gibt ein neues Time-Objekt zurück, dessen numerischer Wert dem von self entspricht, wobei der Sekundenwert auf die Präzision ndigits gerundet wird
t = Time.utc(2010, 3, 30, 5, 43, 25.123456789r) t # => 2010-03-30 05:43:25.123456789 UTC t.round # => 2010-03-30 05:43:25 UTC t.round(0) # => 2010-03-30 05:43:25 UTC t.round(1) # => 2010-03-30 05:43:25.1 UTC t.round(2) # => 2010-03-30 05:43:25.12 UTC t.round(3) # => 2010-03-30 05:43:25.123 UTC t.round(4) # => 2010-03-30 05:43:25.1235 UTC t = Time.utc(1999, 12,31, 23, 59, 59) t # => 1999-12-31 23:59:59 UTC (t + 0.4).round # => 1999-12-31 23:59:59 UTC (t + 0.49).round # => 1999-12-31 23:59:59 UTC (t + 0.5).round # => 2000-01-01 00:00:00 UTC (t + 1.4).round # => 2000-01-01 00:00:00 UTC (t + 1.49).round # => 2000-01-01 00:00:00 UTC (t + 1.5).round # => 2000-01-01 00:00:01 UTC
Verwandt: Time#ceil, Time#floor.
Source
static VALUE
time_saturday(VALUE time)
{
wday_p(6);
}
Gibt true zurück, wenn self einen Samstag repräsentiert, andernfalls false
t = Time.utc(2000, 1, 1) # => 2000-01-01 00:00:00 UTC t.saturday? # => true
Verwandt: Time#sunday?, Time#monday?, Time#tuesday?.
Source
static VALUE
time_sec(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
MAKE_TM(time, tobj);
return INT2FIX(tobj->vtm.sec);
}
Gibt die ganzzahlige Sekunde der Minute für self zurück, im Bereich (0..60)
t = Time.new(2000, 1, 2, 3, 4, 5, 6) # => 2000-01-02 03:04:05 +000006 t.sec # => 5
Hinweis: Der Sekundenwert kann 60 sein, wenn eine Schaltsekunde vorhanden ist.
Source
static VALUE
time_strftime(VALUE time, VALUE format)
{
struct time_object *tobj;
const char *fmt;
long len;
rb_encoding *enc;
VALUE tmp;
GetTimeval(time, tobj);
MAKE_TM_ENSURE(time, tobj, tobj->vtm.yday != 0);
StringValue(format);
if (!rb_enc_str_asciicompat_p(format)) {
rb_raise(rb_eArgError, "format should have ASCII compatible encoding");
}
tmp = rb_str_tmp_frozen_acquire(format);
fmt = RSTRING_PTR(tmp);
len = RSTRING_LEN(tmp);
enc = rb_enc_get(format);
if (len == 0) {
rb_warning("strftime called with empty format string");
return rb_enc_str_new(0, 0, enc);
}
else {
VALUE str = rb_strftime_alloc(fmt, len, enc, time, &tobj->vtm, tobj->timew,
TZMODE_UTC_P(tobj));
rb_str_tmp_frozen_release(format, tmp);
if (!str) rb_raise(rb_eArgError, "invalid format: %"PRIsVALUE, format);
return str;
}
}
Gibt eine Zeichenkettenrepräsentation von self zurück, die gemäß der gegebenen Zeichenkette format formatiert ist. Siehe Formate für Daten und Zeiten.
Source
static VALUE
time_subsec(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
return quov(w2v(wmod(tobj->timew, WINT2FIXWV(TIME_SCALE))), INT2FIX(TIME_SCALE));
}
Gibt die exakten Nachkommastellen für self als Numeric (Integer oder Rational) zurück
t = Time.now # => 2022-07-11 15:11:36.8490302 -0500 t.subsec # => (4245151/5000000)
Wenn die Nachkommastellen Null sind, wird die ganzzahlige Null zurückgegeben
t = Time.new(2000, 1, 1, 2, 3, 4) # => 2000-01-01 02:03:04 -0600 t.subsec # => 0
Source
static VALUE
time_sunday(VALUE time)
{
wday_p(0);
}
Gibt true zurück, wenn self einen Sonntag repräsentiert, andernfalls false
t = Time.utc(2000, 1, 2) # => 2000-01-02 00:00:00 UTC t.sunday? # => true
Verwandt: Time#monday?, Time#tuesday?, Time#wednesday?.
Source
static VALUE
time_thursday(VALUE time)
{
wday_p(4);
}
Gibt true zurück, wenn self einen Donnerstag repräsentiert, andernfalls false
t = Time.utc(2000, 1, 6) # => 2000-01-06 00:00:00 UTC t.thursday? # => true
Verwandt: Time#friday?, Time#saturday?, Time#sunday?.
Source
static VALUE
time_to_a(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
MAKE_TM_ENSURE(time, tobj, tobj->vtm.yday != 0);
return rb_ary_new3(10,
INT2FIX(tobj->vtm.sec),
INT2FIX(tobj->vtm.min),
INT2FIX(tobj->vtm.hour),
INT2FIX(tobj->vtm.mday),
INT2FIX(tobj->vtm.mon),
tobj->vtm.year,
INT2FIX(tobj->vtm.wday),
INT2FIX(tobj->vtm.yday),
RBOOL(tobj->vtm.isdst),
time_zone(time));
}
Gibt ein 10-Elemente-Array von Werten zurück, das self repräsentiert
Time.utc(2000, 1, 1).to_a # => [0, 0, 0, 1, 1, 2000, 6, 1, false, "UTC"] # [sec, min, hour, day, mon, year, wday, yday, dst?, zone]
Das zurückgegebene Array kann als Argument für Time.utc oder Time.local verwendet werden, um ein neues Time-Objekt zu erstellen.
Source
static VALUE
time_to_date(VALUE self)
{
VALUE y, nth, ret;
int ry, m, d;
y = f_year(self);
m = FIX2INT(f_mon(self));
d = FIX2INT(f_mday(self));
decode_year(y, -1, &nth, &ry);
ret = d_simple_new_internal(cDate,
nth, 0,
GREGORIAN,
ry, m, d,
HAVE_CIVIL);
{
get_d1(ret);
set_sg(dat, DEFAULT_SG);
}
return ret;
}
Gibt ein Date-Objekt zurück, das self bezeichnet.
Source
static VALUE
time_to_datetime(VALUE self)
{
VALUE y, sf, nth, ret;
int ry, m, d, h, min, s, of;
y = f_year(self);
m = FIX2INT(f_mon(self));
d = FIX2INT(f_mday(self));
h = FIX2INT(f_hour(self));
min = FIX2INT(f_min(self));
s = FIX2INT(f_sec(self));
if (s == 60)
s = 59;
sf = sec_to_ns(f_subsec(self));
of = FIX2INT(f_utc_offset(self));
decode_year(y, -1, &nth, &ry);
ret = d_complex_new_internal(cDateTime,
nth, 0,
0, sf,
of, GREGORIAN,
ry, m, d,
h, min, s,
HAVE_CIVIL | HAVE_TIME);
{
get_d1(ret);
set_sg(dat, DEFAULT_SG);
}
return ret;
}
Gibt ein DateTime-Objekt zurück, das self bezeichnet.
Source
static VALUE
time_to_f(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
return rb_Float(rb_time_unmagnify_to_float(tobj->timew));
}
Gibt den Wert von self als Float-Zahl Epoch-Sekunden zurück; Nachkommastellen sind enthalten.
Der gespeicherte Wert von self ist ein Rational, was bedeutet, dass der zurückgegebene Wert ungefähr sein kann
Time.utc(1970, 1, 1, 0, 0, 0).to_f # => 0.0 Time.utc(1970, 1, 1, 0, 0, 0, 999999).to_f # => 0.999999 Time.utc(1950, 1, 1, 0, 0, 0).to_f # => -631152000.0 Time.utc(1990, 1, 1, 0, 0, 0).to_f # => 631152000.0
Source
static VALUE
time_to_i(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
return w2v(wdiv(tobj->timew, WINT2FIXWV(TIME_SCALE)));
}
Gibt den Wert von self als ganzzahlige Epoch-Sekunden zurück; Nachkommastellen werden abgeschnitten (nicht gerundet)
Time.utc(1970, 1, 1, 0, 0, 0).to_i # => 0 Time.utc(1970, 1, 1, 0, 0, 0, 999999).to_i # => 0 Time.utc(1950, 1, 1, 0, 0, 0).to_i # => -631152000 Time.utc(1990, 1, 1, 0, 0, 0).to_i # => 631152000
Source
# File ext/json/lib/json/add/time.rb, line 49 def to_json(*args) as_json.to_json(*args) end
Gibt einen JSON-String zurück, der self repräsentiert
require 'json/add/time' puts Time.now.to_json
Ausgabe
{"json_class":"Time","s":1700931678,"n":980650786}
Source
static VALUE
time_to_r(VALUE time)
{
struct time_object *tobj;
VALUE v;
GetTimeval(time, tobj);
v = rb_time_unmagnify_to_rational(tobj->timew);
if (!RB_TYPE_P(v, T_RATIONAL)) {
v = rb_Rational1(v);
}
return v;
}
Gibt den Wert von self als exakte Anzahl von Epoch-Sekunden als Rational zurück;
Time.now.to_r # => (16571402750320203/10000000)
Source
static VALUE
time_to_s(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
if (TZMODE_UTC_P(tobj))
return strftimev("%Y-%m-%d %H:%M:%S UTC", time, rb_usascii_encoding());
else
return strftimev("%Y-%m-%d %H:%M:%S %z", time, rb_usascii_encoding());
}
Gibt eine Zeichenkettenrepräsentation von self zurück, ohne Nachkommastellen
t = Time.new(2000, 12, 31, 23, 59, 59, 0.5) t.to_s # => "2000-12-31 23:59:59 +0000"
Verwandt: Time#ctime, Time#inspect
t.ctime # => "Sun Dec 31 23:59:59 2000" t.inspect # => "2000-12-31 23:59:59.5 +000001"
Source
static VALUE
time_tuesday(VALUE time)
{
wday_p(2);
}
Gibt true zurück, wenn self einen Dienstag repräsentiert, andernfalls false
t = Time.utc(2000, 1, 4) # => 2000-01-04 00:00:00 UTC t.tuesday? # => true
Verwandt: Time#wednesday?, Time#thursday?, Time#friday?.
Source
static VALUE
time_nsec(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
return rb_to_int(w2v(wmulquoll(wmod(tobj->timew, WINT2WV(TIME_SCALE)), 1000000000, TIME_SCALE)));
}
Source
static VALUE
time_usec(VALUE time)
{
struct time_object *tobj;
wideval_t w, q, r;
GetTimeval(time, tobj);
w = wmod(tobj->timew, WINT2WV(TIME_SCALE));
wmuldivmod(w, WINT2FIXWV(1000000), WINT2FIXWV(TIME_SCALE), &q, &r);
return rb_to_int(w2v(q));
}
Gibt die Anzahl der Mikrosekunden im Nachkommateil von self im Bereich (0..999_999) zurück; niedrigere Stellen werden abgeschnitten, nicht gerundet
t = Time.now # => 2022-07-11 14:59:47.5484697 -0500 t.usec # => 548469
Verwandt: Time#subsec (gibt exakte Nachkommastellen zurück).
Gibt self zurück, konvertiert in die UTC-Zeitzone
t = Time.new(2000) # => 2000-01-01 00:00:00 -0600 t.utc? # => false t.utc # => 2000-01-01 06:00:00 UTC t.utc? # => true
Verwandt: Time#getutc (gibt ein neues konvertiertes Time-Objekt zurück).
Source
static VALUE
time_utc_p(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
return RBOOL(TZMODE_UTC_P(tobj));
}
Gibt true zurück, wenn self eine Zeit in UTC (GMT) repräsentiert
now = Time.now # => 2022-08-18 10:24:13.5398485 -0500 now.utc? # => false now.getutc.utc? # => true utc = Time.utc(2000, 1, 1, 20, 15, 1) # => 2000-01-01 20:15:01 UTC utc.utc? # => true
Time-Objekte, die mit diesen Methoden erstellt werden, gelten als in UTC
Objekte, die auf andere Weise erstellt werden, werden nicht als UTC behandelt, auch wenn die Umgebungsvariable „TZ“ auf „UTC“ gesetzt ist.
Verwandt: Time.utc.
Gibt den Offset in Sekunden zwischen den Zeitzonen von UTC und self zurück
Time.utc(2000, 1, 1).utc_offset # => 0 Time.local(2000, 1, 1).utc_offset # => -21600 # -6*3600, or minus six hours.
Source
static VALUE
time_wday(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
MAKE_TM_ENSURE(time, tobj, tobj->vtm.wday != VTM_WDAY_INITVAL);
return INT2FIX((int)tobj->vtm.wday);
}
Source
static VALUE
time_wednesday(VALUE time)
{
wday_p(3);
}
Gibt true zurück, wenn self eine Mittwoch repräsentiert, andernfalls false
t = Time.utc(2000, 1, 5) # => 2000-01-05 00:00:00 UTC t.wednesday? # => true
Verwandt: Time#thursday?, Time#friday?, Time#saturday?.
Source
# File lib/time.rb, line 724 def xmlschema(fraction_digits=0) fraction_digits = fraction_digits.to_i s = strftime("%FT%T") if fraction_digits > 0 s << strftime(".%#{fraction_digits}N") end s << (utc? ? 'Z' : strftime("%:z")) end
Gibt eine Zeichenkette zurück, die die Zeit als dateTime darstellt, wie es durch das XML-Schema definiert ist
CCYY-MM-DDThh:mm:ssTZD CCYY-MM-DDThh:mm:ss.sssTZD
wobei TZD Z oder [+-]hh:mm ist.
Wenn self eine UTC-Zeit ist, wird Z als TZD verwendet. Andernfalls wird [+-]hh:mm verwendet.
fraction_digits gibt die Anzahl der Ziffern an, die für Bruchteile von Sekunden verwendet werden sollen. Der Standardwert ist 0.
require 'time' t = Time.now t.iso8601 # => "2011-10-05T22:26:12-04:00"
Sie müssen 'time' benötigen, um diese Methode zu verwenden.
Source
static VALUE
time_yday(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
MAKE_TM_ENSURE(time, tobj, tobj->vtm.yday != 0);
return INT2FIX(tobj->vtm.yday);
}
Gibt den ganzzahligen Tag des Jahres von self zurück, im Bereich (1..366).
Time.new(2000, 1, 1).yday # => 1 Time.new(2000, 12, 31).yday # => 366
Source
static VALUE
time_year(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
MAKE_TM(time, tobj);
return tobj->vtm.year;
}
Source
static VALUE
time_zone(VALUE time)
{
struct time_object *tobj;
VALUE zone;
GetTimeval(time, tobj);
MAKE_TM(time, tobj);
if (TZMODE_UTC_P(tobj)) {
return rb_usascii_str_new_cstr("UTC");
}
zone = tobj->vtm.zone;
if (NIL_P(zone))
return Qnil;
if (RB_TYPE_P(zone, T_STRING))
zone = rb_str_dup(zone);
return zone;
}
Gibt den Zeichenkettennamen der Zeitzone für self zurück
Time.utc(2000, 1, 1).zone # => "UTC" Time.new(2000, 1, 1).zone # => "Central Standard Time"