Suche…
Einführung
Das Go- time
Paket bietet Funktionen zum Messen und Anzeigen von Zeit.
Dieses Paket enthält eine Struktur time.Time
, die das Speichern und Berechnen von Datums- und Zeitangaben ermöglicht.
Syntax
- time.Date (2016, time.Dezember 31, 23, 59, 59, 999, time.UTC) // initialisieren
- date1 == date2 // gibt
true
zurücktrue
wenn die 2 den gleichen Moment haben - date1! = date2 // gibt
true
zurücktrue
wenn die 2 unterschiedliche Momente sind - date1.Before (date2) // gibt
true
zurücktrue
wenn das erste streng vor dem zweiten ist - date1.Nach (date2) // gibt
true
zurücktrue
wenn der erste streng nach dem zweiten ist
Return time.Time Zero Wert, wenn die Funktion einen Fehler aufweist
const timeFormat = "15 Monday January 2006" func ParseDate(s string) (time.Time, error) { t, err := time.Parse(timeFormat, s) if err != nil { // time.Time{} returns January 1, year 1, 00:00:00.000000000 UTC // which according to the source code is the zero value for time.Time // https://golang.org/src/time/time.go#L23 return time.Time{}, err } return t, nil }
Zeitanalyse
Wenn Sie ein Datum als Zeichenfolge gespeichert haben, müssen Sie es analysieren. Verwenden Sie time.Parse
.
// time.Parse( format , date to parse)
date, err := time.Parse("01/02/2006", "04/08/2017")
if err != nil {
panic(err)
}
fmt.Println(date)
// Prints 2017-04-08 00:00:00 +0000 UTC
Der erste Parameter ist das Layout, in dem die Zeichenfolge das Datum speichert, und der zweite Parameter ist die Zeichenfolge, die das Datum enthält. 01/02/2006
ist das gleiche als zu sagen, dass das Format MM/DD/YYYY
.
Das Layout definiert das Format, indem es zeigt, wie die Referenzzeit ( Mon Jan 2 15:04:05 -0700 MST 2006
interpretiert würde, wenn dies der Wert wäre. Es dient als Beispiel für das Eingabeformat. Die gleiche Interpretation wird dann für die Eingabezeichenfolge vorgenommen.
Sie können die im Zeitpaket definierten Konstanten sehen, um zu wissen, wie die Layoutzeichenfolge geschrieben wird. Beachten Sie jedoch, dass die Konstanten nicht exportiert werden und nicht außerhalb des Zeitpakets verwendet werden können.
const (
stdLongMonth // "January"
stdMonth // "Jan"
stdNumMonth // "1"
stdZeroMonth // "01"
stdLongWeekDay // "Monday"
stdWeekDay // "Mon"
stdDay // "2"
stdUnderDay // "_2"
stdZeroDay // "02"
stdHour // "15"
stdHour12 // "3"
stdZeroHour12 // "03"
stdMinute // "4"
stdZeroMinute // "04"
stdSecond // "5"
stdZeroSecond // "05"
stdLongYear // "2006"
stdYear // "06"
stdPM // "PM"
stdpm // "pm"
stdTZ // "MST"
stdISO8601TZ // "Z0700" // prints Z for UTC
stdISO8601SecondsTZ // "Z070000"
stdISO8601ShortTZ // "Z07"
stdISO8601ColonTZ // "Z07:00" // prints Z for UTC
stdISO8601ColonSecondsTZ // "Z07:00:00"
stdNumTZ // "-0700" // always numeric
stdNumSecondsTz // "-070000"
stdNumShortTZ // "-07" // always numeric
stdNumColonTZ // "-07:00" // always numeric
stdNumColonSecondsTZ // "-07:00:00"
)
Zeit vergleichen
Manchmal müssen Sie mit 2 Datumsobjekten wissen, ob es sich um dasselbe Datum handelt oder welches Datum hinter dem anderen liegt.
In Go gibt es vier Möglichkeiten, Daten zu vergleichen:
-
date1 == date2
gibttrue
zurücktrue
wenn die 2 den gleichen Moment haben -
date1 != date2
, gibttrue
zurücktrue
wenn die 2 unterschiedliche Momente sind -
date1.Before(date2)
gibttrue
zurücktrue
wenn das erste streng vor dem zweiten ist -
date1.After(date2)
gibttrue
zurücktrue
wenn der erste streng nach dem zweiten ist
WARNUNG: Wenn die 2 Zeit zum Vergleichen gleich sind (oder dem gleichen Datum entsprechen), werden die Funktionen
After
undBefore
alsfalse
, da ein Datum weder vor noch hinter sich liegt
date1 == date1
gibttrue
date1 != date1
, gibtfalse
date1.After(date1)
gibtfalse
date1.Before(date1)
gibtfalse
TIPPS: Wenn Sie wissen müssen, ob ein Datum vor oder einem anderen Datum liegt, müssen Sie nur die 4 Operatoren kombinieren
date1 == date2 && date1.After(date2)
wirdtrue
wenn Datum1 nach oder gleich Datum2 ist
oder mit! (date1.Before(date2))
date1 == date2 && date1.Before(date2)
, gibttrue
zurücktrue
wenn date1 vor oder gleich date2 oder mit!(date1.After(date2))
Einige Beispiele zur Verwendung:
// Init 2 dates for example
var date1 = time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC)
var date2 = time.Date(2017, time.July, 25, 16, 22, 42, 123, time.UTC)
var date3 = time.Date(2017, time.July, 25, 16, 22, 42, 123, time.UTC)
bool1 := date1.Before(date2) // true, because date1 is before date2
bool2 := date1.After(date2) // false, because date1 is not after date2
bool3 := date2.Before(date1) // false, because date2 is not before date1
bool4 := date2.After(date1) // true, because date2 is after date1
bool5 := date1 == date2 // false, not the same moment
bool6 := date1 == date3 // true, different objects but representing the exact same time
bool7 := date1 != date2 // true, different moments
bool8 := date1 != date3 // false, not different moments
bool9 := date1.After(date3) // false, because date1 is not after date3 (that are the same)
bool10:= date1.Before(date3) // false, because date1 is not before date3 (that are the same)
bool11 := !(date1.Before(date3)) // true, because date1 is not before date3
bool12 := !(date1.After(date3)) // true, because date1 is not after date3