Geçerli saati Go'da biçimlendirilmiş dize olarak alın?


Yanıtlar:


149

time.Now()İşlevi ve time.Format()yöntemi kullanın .

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

çıktı 20110504111515ya da en azından birkaç dakika önce çıktı. (Doğu Yaz Saati'ndeyim.) Zaman paketinde tanımlanan sabitlerde önceden tanımlanmış birkaç saat biçimi vardır .

time.Now().UTC()Yerel saat diliminizden UTC olmasını tercih ediyorsanız kullanabilirsiniz .


15
Kitchen( = "3:04PM")
Sabitini

5
Bu bilgi için teşekkürler. Zaman paketi "20060102150405" i geçtiğimizden, tam da geçtiğimiz şeyi, çünkü bu zaman paketindeki önceden tanımlanmış sabitlerden biri olmadığı için nasıl biliyor? Zaman paketinde (20060102150405) bu tarih ve saatin önemi nedir? Bana biraz tuhaf geliyor, ancak çalıştığı sürece kodlarken hata yapmadığımız sürece önemli değil sanırım. Sanırım bu format için bir sabit sağlamak için uygun görmediler ve dize modeliyle eşleşiyorlar.
brianoh

9
@brianoh: Bkz. golang.org/pkg/time/#Constants Saat "01/02 03:04:05 PM '06 -0700" Çünkü her bileşenin farklı bir numarası (1, 2, 3, vb.), sayılardan istediğiniz bileşenleri belirleyebilir.
newacct

1
Lütfen time.LocalTime () 'ın artık mevcut olmadığını unutmayın: Go 1.0.3 uyumlu olması için aşağıdaki
cevabıma bakın

71

Diğer tüm yanıtlar, google'dan gelen ve "hareket halindeyken zaman damgası" arayan biri için çok yanlış yönlendiriyor! YYYYMMDDhhmmss bir "zaman damgası" değildir.

Hareket halindeki bir tarihin "zaman damgasını" (Ocak 1970'den itibaren saniye sayısı) elde etmek için, doğru işlev .Unix () 'dir ve gerçekten bir tamsayı döndürür


8
Katılıyorum; soru "şimdiki zaman damgası" değil "geçerli tarih" olmalıdır
developerbmw

1
Geç olmasına rağmen, bence .Unix () geri dönüş türü int64 olan golang.org/pkg/time/#Time.Unix'i işaret etmeli .
bornfree

Teknik olarak haklı olmanıza rağmen, bence bu günlerde birçok kodlayıcı zaman damgasını 'Biçimlendirilmiş bir tür şu anki zaman' ile birleştiriyor, böylece başlık çoğu için eşit derecede kafa karıştırıcı olurdu.
Roger Hill

Bir düzenleme önerdim - Get current time as formatted string in Go?. Umarım birisi onaylar.
akki

56

Okunabilirlik için, en iyisi zaman paketindeki RFC sabitlerini kullanmaktır (bence)

import "fmt" 
import "time"

func main() {
    fmt.Println(time.Now().Format(time.RFC850))
}

4
Bu nasıl YYYYMMDDhhmmss üretir?
Rod

2
RFC850, Tuesday, 10-Nov-09 23:00:00 UTC RFC3339 = "2006-01-02T15:04:05Z07:00" play.golang.org/p/XmobwWSz5pN golang.org/pkg/time üretir
Chris McKee

33

Kullan time.Now () ve time.Format () () time.LocalTime olarak (Go 1.0.3 itibariyle artık yok) fonksiyonları

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

Çevrimiçi demo (oyun alanında geçmişte sabitlenmiş tarihle, boşver)


6
Ve bunu basitçe şöyle bir dizge olarak kullanabilirsiniz:s := "Actual time is: "+time.Now().String()
Michael,


2

@ Bactisme'nin yanıtına bir yankı olarak, geçerli zaman damgasını (örneğin milisaniye cinsinden) almak için izlenecek yol şudur:

msec := time.Now().UnixNano() / 1000000

Kaynak: https://gobyexample.com/epoch


0

https://golang.org/src/time/format.go belirtilir Ayrıştırma süresi 15Saatler 04için kullanılır, dakikalar 05için, saniyeler için kullanılır .

Tarihi ayrıştırma için 11, Jan, Januaryaylarca vardır 02, Mon, Mondayayın günü için, 2006yıl boyunca ve elbette MSTbölge için

Ama benim çok basit bulduğum bu düzeni de kullanabilirsiniz. "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

DEMO


-4

Soruyu tam olarak cevaplamak için:

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

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

Teşekkürler Suran, bu, zaman damgasının grpc
rajeshk
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.