Dapatkan waktu saat ini sebagai string yang diformat di Go?

131

Apa cara terbaik untuk mendapatkan cap waktu saat ini di Go dan konversi ke string? Saya membutuhkan tanggal dan waktu dalam mis. Format YYYYMMDDhhmmss.

brianoh
sumber
1
Ini yang Anda butuhkan golangprograms.com/...
Eduardo A. Fernández Díaz

Jawaban:

149

Gunakan time.Now()fungsi dan time.Format()metode.

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

mencetak 20110504111515, atau setidaknya beberapa menit yang lalu. (Saya pada Waktu Siang Timur.) Ada beberapa format waktu yang telah ditentukan sebelumnya dalam konstanta yang ditentukan dalam paket waktu.

Anda dapat menggunakan time.Now().UTC()jika Anda lebih memilih UTC daripada zona waktu lokal Anda.

nmichaels
sumber
15
Saya pasti suka Kitchenkonstanta ( = "3:04PM")
tux21b
5
Terima kasih untuk info itu. Bagaimana paket waktu tahu dari melewati "20060102150405", hanya apa yang kami lewati, karena itu bukan salah satu dari konstanta yang telah ditentukan sebelumnya dalam paket waktu? Apa pentingnya tanggal dan waktu itu dalam paket waktu (20060102150405)? Tampaknya sedikit aneh bagi saya, tetapi selama itu berfungsi saya kira itu tidak masalah asalkan kita tidak membuat kesalahan ketika mengkodekannya. Saya kira mereka tidak ingin memberikan konstanta untuk format itu, dan cocok dengan pola string.
brianoh
9
@brianoh: Lihat golang.org/pkg/time/#Constants Inilah waktunya "01/02 03:04:05 PM '06 -0700" Karena setiap komponen memiliki angka yang berbeda (1, 2, 3, dll.), itu dapat menentukan dari angka-angka komponen apa yang Anda inginkan.
newacct
1
Harap perhatikan bahwa waktu.LocalTime () tidak ada lagi: lihat jawaban saya di bawah ini agar kompatibel dengan Go 1.0.3
Deleplace
71

Semua respons lain sangat salah bagi seseorang yang datang dari google dan mencari "timestamp in go"! YYYYMMDDhhmmss bukan "timestamp".

Untuk mendapatkan "stempel waktu" dari sebuah tanggal dalam perjalanan (jumlah detik dari Januari 1970), fungsi yang benar adalah .Unix () , dan itu benar-benar mengembalikan bilangan bulat

Bactisme
sumber
8
Saya setuju; pertanyaannya harus berjudul "tanggal saat ini" bukan "cap waktu saat ini"
developerbmw
1
Meskipun terlambat, saya pikir .Unix () harus mengarah ke golang.org/pkg/time/#Time.Unix yang tipe pengembaliannya int64.
Dilahirkan gratis
Meskipun secara teknis Anda benar, saya pikir banyak coders hari ini mengacaukan stempel waktu dengan, 'Waktu saat ini dalam bentuk yang diformat', sehingga judul akan sama membingungkan bagi kebanyakan orang.
Roger Hill
Saya telah menyarankan hasil edit - Get current time as formatted string in Go?. Semoga seseorang akan menyetujuinya.
akki
56

Untuk keterbacaan, terbaik untuk menggunakan konstanta RFC dalam paket waktu (saya pikir)

import "fmt" 
import "time"

func main() {
    fmt.Println(time.Now().Format(time.RFC850))
}
matthewmcneely
sumber
4
Bagaimana ini menghasilkan YYYYMMDDhhmmss?
Rod
2
RFC850 menghasilkan Tuesday, 10-Nov-09 23:00:00 UTC RFC3339 = "2006-01-02T15:04:05Z07:00" play.golang.org/p/XmobwWSz5pN golang.org/pkg/time
Chris McKee
32

Gunakan fungsi time.Now () dan time.Format () (karena time.LocalTime () tidak ada lagi pada Go 1.0.3)

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

Demo online (dengan tanggal yang ditetapkan di masa lalu di taman bermain, apalagi)

Deleplace
sumber
6
Dan Anda dapat menggunakannya hanya sebagai string seperti ini:s := "Actual time is: "+time.Now().String()
Michael
2

Sebagai gema tanggapan @ Bactisme, cara orang mengambil cap waktu saat ini (dalam milidetik, misalnya) adalah:

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

Sumberdaya: https://gobyexample.com/epoch

Jack Ryan
sumber
0

https://golang.org/src/time/format.go ditentukan Untuk waktu penguraian 15digunakan untuk Jam, 04digunakan untuk menit, 05untuk detik.

Untuk parsing Tanggal 11, Jan, Januaryadalah untuk bulan, 02, Mon, Mondayuntuk Hari bulan, 2006untuk tahun dan tentu saja MSTuntuk zona

Tetapi Anda dapat menggunakan tata letak ini juga, yang menurut saya sangat sederhana. "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

BAJA
sumber
-4

Untuk menjawab pertanyaan yang tepat:

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

Timestamp, _ = ptypes.TimestampProto(time.Now())
suran
sumber
Terima kasih Suran, ini berguna ketika cap waktu harus dikirim melintasi grpc
rajeshk