Jak sformatować bieżący czas w formacie rrrrMMddGGmmss?

119

Próbuję sformatować bieżący czas przy użyciu tego formatu yyyyMMddHHmmss.

t := time.Now()
fmt.Println(t.Format("yyyyMMddHHmmss"))

To jest wyjście:

yyyyMMddHHmmss

Jakieś sugestie?

sergserg
źródło
Oto przykładowy plac zabaw pokazujący, jak działa formatowanie daty. Jest to zarówno konwersja ciągu znaków na czas, jak i wydrukowanie czasu w określonym formacie. play.golang.org/p/qK6_9KNJNx
Nitesh

Odpowiedzi:

242

Posługiwać się

fmt.Println(t.Format("20060102150405"))

ponieważ Go używa następujących stałych do formatowania daty, patrz tutaj

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
    stdISO8601ColonTZ = "Z07:00" // prints Z for UTC
    stdNumTZ          = "-0700"  // always numeric
    stdNumShortTZ     = "-07"    // always numeric
    stdNumColonTZ     = "-07:00" // always numeric
)
Kryzys
źródło
56
pod względem fizycznym format golang jest bardzo dziwny. dlaczego nie użyć stylu yyyymmddHHiiss, ale użyć „2006/01/02/15/04/05”, nie rozumiem prawdziwego powodu
Kewin
11
Ciąg układu jest reprezentacją znacznika czasu, 2 stycznia 2006 r. 15:04:05 czasu MST. Łatwym sposobem na zapamiętanie tej wartości jest to, że przechowuje, gdy jest przedstawiona w tej kolejności, wartości (wyrównane z powyższymi elementami): 1 2 3 4 5 6 -7 From golang.org/src/time/example_test.go
kakilangit
28
Technika mnemoniczna dla osób spoza USA: wyobraź sobie, co robiłeś 2 stycznia 2006 r., Zaledwie pięć sekund po 15:04, ale wyobraź sobie, że dzieje się to w Burkina Faso (UTC -7). Następnym razem, gdy będziesz musiał sformatować datę, pamiętaj tylko o tym konkretnym wydarzeniu (!)
Enrico
3
Nie znałem kolejnych mnemoników, poręczny, ale daj
spokój,
4
Więc wszystko, co muszę pamiętać, to ustawić datę w kolejności miesiąc-dzień-rok, a następnie umieścić czas w środku i ustawić strefę czasową po roku, a staje się to bardzo łatwe do zapamiętania. Schludny. Czy ktoś ma mnemonik do zapamiętania kolejności tego mnemonika ..?
Joey Sabey
20

To pytanie pojawia się na pierwszym miejscu w wyszukiwarce Google, gdy znajdziesz „aktualny format czasu w golang”, więc w przypadku wszystkich osób, które chcą użyć innego formatu, pamiętaj, że zawsze możesz zadzwonić pod numer:

t := time.Now()

t.Year()

t.Month()

t.Day()

t.Hour()

t.Minute()

t.Second()

Na przykład, aby uzyskać bieżącą datę i godzinę jako „RRRR-MM-DDTHH: MM: SS” (na przykład 2019-01-22T12: 40: 55), możesz użyć tych metod z fmt.Sprintf:

t := time.Now()
formatted := fmt.Sprintf("%d-%02d-%02dT%02d:%02d:%02d",
        t.Year(), t.Month(), t.Day(),
        t.Hour(), t.Minute(), t.Second())

Jak zawsze pamiętaj, że najlepszym źródłem wiedzy są dokumenty: https://golang.org/pkg/time/

Luis Cabrera Benito
źródło
4

Pakiet czasowy w Golang ma kilka metod, które mogą być warte uwagi.

func (czas) Format

func (t Time) Format (ciąg układu) string Format zwraca tekstową reprezentację wartości czasu sformatowanej zgodnie z układem, która definiuje format, pokazując, jak czas odniesienia,

Mon Jan 2 15:04:05 -0700 MST 2006 byłby wyświetlany, gdyby była to wartość; służy jako przykład pożądanego wyniku. Te same reguły wyświetlania zostaną następnie zastosowane do wartości czasu. Predefiniowane układy ANSIC, UnixDate, RFC3339 i inne opisują standardowe i wygodne reprezentacje czasu odniesienia. Aby uzyskać więcej informacji na temat formatów i definicji czasu odniesienia, zapoznaj się z dokumentacją ANSIC i innych stałych zdefiniowanych w tym pakiecie.

Źródło ( http://golang.org/pkg/time/#Time.Format )

Znalazłem też przykład definiowania układu ( http://golang.org/src/pkg/time/example_test.go )

func ExampleTime_Format() {
        // layout shows by example how the reference time should be represented.
        const layout = "Jan 2, 2006 at 3:04pm (MST)"
        t := time.Date(2009, time.November, 10, 15, 0, 0, 0, time.Local)
        fmt.Println(t.Format(layout))
        fmt.Println(t.UTC().Format(layout))
        // Output:
    // Nov 10, 2009 at 3:00pm (PST)
        // Nov 10, 2009 at 11:00pm (UTC)
    }
TheZelus
źródło
4
import("time")

layout := "2006-01-02T15:04:05.000Z"
str := "2014-11-12T11:45:26.371Z"
t, err := time.Parse(layout, str)
if err != nil {
    fmt.Println(err)
}
fmt.Println(t)

daje:

>> 2014-11-12 11:45:26.371 +0000 UTC
Cool.wen
źródło