Formate für Daten und Zeiten

Mehrere Ruby-Klassen im Zusammenhang mit Zeit haben die Instanzmethode strftime, die eine formatierte Zeichenkette zurückgibt, die ein Datum oder eine Zeit ganz oder teilweise darstellt.

Jede dieser Methoden nimmt ein optionales Argument format entgegen, das null oder mehr eingebettete Formatangaben (siehe unten) enthält.

Jede dieser Methoden gibt die Zeichenkette zurück, die sich aus dem Ersetzen jeder im format eingebetteten Formatangabe durch eine Zeichenkettenform eines oder mehrerer Teile des Datums oder der Zeit ergibt.

Ein einfaches Beispiel

Time.now.strftime('%H:%M:%S') # => "14:02:07"

Eine Formatangabe hat die Form

%[flags][width]conversion

Sie besteht aus

Bis auf das führende Prozentzeichen ist der einzige erforderliche Teil die Konvertierungsangabe, also beginnen wir damit.

Konvertierungsangaben

Datum (Jahr, Monat, Tag)

Zeit (Stunde, Minute, Sekunde, Bruchteile von Sekunden)

Zeitzone

Wochentag

Wochennummer

Wochen-Daten

Siehe ISO 8601 Wochen-Daten.

t0 = Time.new(2023, 1, 1) # => 2023-01-01 00:00:00 -0600
t1 = Time.new(2024, 1, 1) # => 2024-01-01 00:00:00 -0600

Literale

Kurzbezeichner für Konvertierungen

Jeder Kurzbezeichner hier ist mit seinem entsprechenden Langbezeichner dargestellt.

Flags

Flags können bestimmte Formatierungen beeinflussen.

Mehrere Flags können mit einer einzelnen Konvertierung angegeben werden; die Reihenfolge spielt keine Rolle.

Auffüll-Flags

Groß-/Kleinschreibungs-Flags

Zeitzonen-Flags

Breitenangaben

Die Ganzzahl-Breitenangabe gibt eine minimale Breite für die zurückgegebene Zeichenkette an.

Time.new(2002).strftime('%Y')       # => "2002"     # No width specifier.
Time.new(2002).strftime('%10Y')     # => "0000002002"
Time.new(2002, 12).strftime('%B')   # => "December" # No width specifier.
Time.new(2002, 12).strftime('%10B') # => "  December"
Time.new(2002, 12).strftime('%3B')  # => "December" # Ignored if too small.

Spezialisierte Formatzeichenketten

Hier sind einige spezialisierte Formatzeichenketten, die jeweils auf einem externen Standard basieren.

HTTP-Format

Das HTTP-Datumsformat basiert auf RFC 2616 und behandelt Daten im Format '%a, %d %b %Y %T GMT'

d = Date.new(2001, 2, 3) # => #<Date: 2001-02-03>
# Return HTTP-formatted string.
httpdate = d.httpdate    # => "Sat, 03 Feb 2001 00:00:00 GMT"
# Return new date parsed from HTTP-formatted string.
Date.httpdate(httpdate)  # => #<Date: 2001-02-03>
# Return hash parsed from HTTP-formatted string.
Date._httpdate(httpdate)
# => {:wday=>6, :mday=>3, :mon=>2, :year=>2001, :hour=>0, :min=>0, :sec=>0, :zone=>"GMT", :offset=>0}

RFC 3339-Format

Das RFC 3339-Datumsformat basiert auf RFC 3339

d = Date.new(2001, 2, 3) # => #<Date: 2001-02-03>
# Return 3339-formatted string.
rfc3339 = d.rfc3339      # => "2001-02-03T00:00:00+00:00"
# Return new date parsed from 3339-formatted string.
Date.rfc3339(rfc3339)    # => #<Date: 2001-02-03>
# Return hash parsed from 3339-formatted string.
Date._rfc3339(rfc3339)
# => {:year=>2001, :mon=>2, :mday=>3, :hour=>0, :min=>0, :sec=>0, :zone=>"+00:00", :offset=>0}

RFC 2822-Format

Das RFC 2822-Datumsformat basiert auf RFC 2822 und behandelt Daten im Format '%a, %-d %b %Y %T %z']

d = Date.new(2001, 2, 3) # => #<Date: 2001-02-03>
# Return 2822-formatted string.
rfc2822 = d.rfc2822      # => "Sat, 3 Feb 2001 00:00:00 +0000"
# Return new date parsed from 2822-formatted string.
Date.rfc2822(rfc2822)    # => #<Date: 2001-02-03>
# Return hash parsed from 2822-formatted string.
Date._rfc2822(rfc2822)
# => {:wday=>6, :mday=>3, :mon=>2, :year=>2001, :hour=>0, :min=>0, :sec=>0, :zone=>"+0000", :offset=>0}

JIS X 0301-Format

Das JIS X 0301-Format beinhaltet den japanischen Äranamen und behandelt Daten im Format '%Y-%m-%d' mit dem ersten Buchstaben des romanisierten Äranamens vorangestellt

d = Date.new(2001, 2, 3) # => #<Date: 2001-02-03>
# Return 0301-formatted string.
jisx0301 = d.jisx0301    # => "H13.02.03"
# Return new date parsed from 0301-formatted string.
Date.jisx0301(jisx0301)  # => #<Date: 2001-02-03>
# Return hash parsed from 0301-formatted string.
Date._jisx0301(jisx0301) # => {:year=>2001, :mon=>2, :mday=>3}

ISO 8601-Formatangaben

Dieser Abschnitt zeigt Formatangaben, die mit ISO 8601 kompatibel sind. Details zu verschiedenen Formaten finden Sie unter den Links.

Beispiele in diesem Abschnitt gehen von Folgendem aus:

t = Time.now # => 2022-06-29 16:49:25.465246 -0500

Daten

Siehe ISO 8601 Daten.

Zeiten

Siehe ISO 8601 Zeiten.

Kombinierte Datum und Zeit

Siehe ISO 8601 Kombinierte Darstellungen von Datum und Zeit.

Eine ISO 8601 kombinierte Datums- und Zeitdarstellung kann jedes ISO 8601 Datum und jede ISO 8601 Zeit sein, getrennt durch den Buchstaben T.

Für die relevanten strftime-Formate siehe Daten und Zeiten oben.