Pobrać aktualny czas jako sformatowany ciąg w Go?


Odpowiedzi:


152

Użyj time.Now()funkcji i time.Format()metody.

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

drukuje 20110504111515, a przynajmniej kilka minut temu. (Jestem na wschodnim czasie letnim). Istnieje kilka predefiniowanych formatów czasu w stałych zdefiniowanych w pakiecie czasu.

Możesz użyć, time.Now().UTC()jeśli wolisz czas UTC niż lokalną strefę czasową.


16
Zdecydowanie podoba mi się Kitchenstała ( = "3:04PM")
tux21b

5
Dzięki za te informacje. Skąd pakiet czasu wie po przekazaniu "20060102150405", po prostu co mijamy, skoro nie jest to jedna z predefiniowanych stałych w pakiecie czasu? Jakie znaczenie ma ta data i godzina w pakiecie czasu (20060102150405)? Wydaje mi się to trochę dziwaczne, ale przypuszczam, że dopóki działa, nie ma to znaczenia, o ile nie popełnimy błędu podczas kodowania. Wydaje mi się, że nie uznali za stosowne dostarczenia stałej dla tego formatu i dopasowania wzorca ciągu.
brianoh

9
@brianoh: patrz golang.org/pkg/time/#Constants Nadszedł czas „01/02 03:04:05 PM '06 -0700” Ponieważ każdy składnik ma inny numer (1, 2, 3 itd.), na podstawie liczb może określić, jakie składniki chcesz.
newacct

1
Zwróć uwagę, że time.LocalTime () już nie istnieje: zobacz moją odpowiedź poniżej, aby była kompatybilna z Go 1.0.3
Deleplace

71

Wszystkie inne odpowiedzi są bardzo chybione dla kogoś, kto pochodzi z Google i szuka „sygnatury czasowej w go”! RRRRMMDDhhmmss nie jest „datownikiem”.

Aby uzyskać „znacznik czasu” daty w ruchu (liczbę sekund od stycznia 1970 r.), Poprawna funkcja to .Unix () , która w rzeczywistości zwraca liczbę całkowitą


8
Zgadzam się; pytanie powinno być zatytułowane „aktualna data”, a nie „aktualna sygnatura czasowa”
developerbmw

1
Chociaż jest późno, myślę, że .Unix () powinno wskazywać na golang.org/pkg/time/#Time.Unix, którego typem zwracanym jest int64.
bornfree

Chociaż technicznie jesteście poprawni, myślę, że wielu programistów w dzisiejszych czasach łączy znacznik czasu z „Bieżącym czasem w jakiś sformatowany sposób”, więc ten tytuł byłby równie zagmatwany dla większości.
Roger Hill

Zaproponowałem edycję - Get current time as formatted string in Go?. Miejmy nadzieję, że ktoś to zaakceptuje.
akki


33

Użyj funkcji time.Now () i time.Format () (ponieważ time.LocalTime () nie istnieje już od Go 1.0.3)

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

Demo online (z datą ustaloną w przeszłości na placu zabaw, nieważne)


6
Możesz użyć tego po prostu jako ciągu, takiego jak ten:s := "Actual time is: "+time.Now().String()
Michael



0

https://golang.org/src/time/format.go określony Do analizy czas 15jest używany do godzin, 04jest używany do minut, 05do sekund.

Do parsowania Data 11, Jan, Januaryto przez kilka miesięcy, 02, Mon, Mondaydla dnia miesiąca, 2006za rok i oczywiścieMST dla strefy

Ale możesz również użyć tego układu, który uważam za bardzo prosty. "Mon Jan 2 15:04:05 MST 2006"

    const layout = "Mon Jan 2 15:04:05 MST 2006"
    userTimeString := "Fri Dec 6 13:05:05 CET 2019"

    t, _ := time.Parse(layout, userTimeString)
    fmt.Println("Server: ", t.Format(time.RFC850))
    //Server:  Friday, 06-Dec-19 13:05:05 CET

    mumbai, _ := time.LoadLocation("Asia/Kolkata")
    mumbaiTime := t.In(mumbai)
    fmt.Println("Mumbai: ", mumbaiTime.Format(time.RFC850))
    //Mumbai:  Friday, 06-Dec-19 18:35:05 IST

PRÓBNY


-4

Aby odpowiedzieć dokładnie na pytanie:

import "github.com/golang/protobuf/ptypes"

Timestamp, _ = ptypes.TimestampProto(time.Now())

Dzięki Suran, jest to przydatne, gdy trzeba wysłać znacznik czasu przez grpc
rajeshk
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.