รับเวลาปัจจุบันเป็นสตริงที่จัดรูปแบบใน Go?


131

วิธีใดดีที่สุดในการรับการประทับเวลาปัจจุบันใน Go และแปลงเป็นสตริง ฉันต้องการทั้งวันที่และเวลาในเช่น YYYYMMDDhhmmss


1
นี่คือทั้งหมดที่คุณต้องการgolangprograms.com/…
Eduardo A. FernándezDíaz

คำตอบ:


149

ใช้time.Now()ฟังก์ชันและtime.Format()วิธีการ

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

พิมพ์ออกมา20110504111515หรืออย่างน้อยก็เมื่อไม่กี่นาทีที่ผ่านมา (ฉันใช้เวลาออมแสงตะวันออก) มีรูปแบบเวลาที่กำหนดไว้ล่วงหน้าหลายรูปแบบในค่าคงที่ที่กำหนดไว้ในแพ็กเกจเวลา

คุณสามารถใช้time.Now().UTC()หากคุณต้องการมี UTC มากกว่าเขตเวลาท้องถิ่นของคุณ


15
ฉันชอบKitchenค่าคงที่แน่นอน( = "3:04PM")
tux21b

5
ขอบคุณสำหรับข้อมูลนั้น แพ็กเกจเวลารู้ได้อย่างไรว่าผ่าน "20060102150405" เพียงแค่สิ่งที่เรากำลังผ่านเนื่องจากไม่ใช่ค่าคงที่ที่กำหนดไว้ล่วงหน้าในแพ็กเกจเวลา ความสำคัญของวันที่และเวลาในแพ็กเกจเวลา (20060102150405) คืออะไร? ดูเหมือนจะเป็นเรื่องแปลกสำหรับฉัน แต่ตราบใดที่มันใช้งานได้ฉันคิดว่ามันไม่สำคัญตราบใดที่เราไม่เกิดข้อผิดพลาดเมื่อเขียนโค้ด ฉันเดาว่าพวกเขาไม่เห็นสมควรที่จะระบุค่าคงที่สำหรับรูปแบบนั้นและตรงกับรูปแบบสตริง
brianoh

9
@brianoh: ดูgolang.org/pkg/time/#Constantsเป็นเวลา "01/02 03:04:05 PM '06 -0700" เนื่องจากแต่ละองค์ประกอบมีตัวเลขที่แตกต่างกัน (1, 2, 3 ฯลฯ ) โดยสามารถกำหนดได้จากตัวเลขว่าต้องการส่วนประกอบใด
newacct

1
โปรดทราบว่าเวลา LocalTime () ไม่มีอยู่อีกต่อไป: ดูคำตอบของฉันด้านล่างเพื่อรองรับ Go 1.0.3
Deleplace

71

การตอบกลับอื่น ๆ ทั้งหมดนั้นนำไปสู่การพลาดอย่างมากสำหรับคนที่มาจาก Google และกำลังมองหา "timestamp in go"! YYYYMMDDhhmmss ไม่ใช่ "การประทับเวลา"

ในการรับ "การประทับเวลา" ของวันที่ที่ไป (จำนวนวินาทีจากมกราคม 1970) ฟังก์ชันที่ถูกต้องคือ. Unix ()และจะส่งกลับจำนวนเต็ม


8
ฉันเห็นด้วย; คำถามควรมีชื่อว่า "วันที่ปัจจุบัน" ไม่ใช่ "การประทับเวลาปัจจุบัน"
developerbmw

1
แม้ว่ามันจะสายไปแล้ว แต่ฉันคิดว่า. Unix () ควรชี้ไปที่golang.org/pkg/time/#Time.Unixซึ่งประเภทการส่งคืนคือ int64
ฟรี

ในขณะที่คุณเข้าใจถูกต้องในทางเทคนิคฉันคิดว่าผู้เขียนโค้ดจำนวนมากในทุกวันนี้ใช้เวลาในการประทับเวลากับ 'เวลาปัจจุบันในรูปแบบที่มีรูปแบบบางอย่าง' ดังนั้นชื่อเรื่องนั้นจะทำให้คนส่วนใหญ่สับสนพอ ๆ กัน
Roger Hill

ผมมีข้อเสนอแนะแก้ไข Get current time as formatted string in Go?- หวังว่าจะมีคนอนุมัตินะ
akki

56

เพื่อให้อ่านง่ายควรใช้ค่าคงที่ RFC ในแพ็คเกจเวลา (ฉันคิดว่า)

import "fmt" 
import "time"

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

4
สิ่งนี้ผลิตอย่างไร YYYYMMDDhhmmss?
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
Chris McKee

33

ใช้ฟังก์ชันtime.Now ()และtime.Format () (เป็นเวลา LocalTime () ไม่มีอยู่อีกต่อไปตั้งแต่ Go 1.0.3)

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

การสาธิตออนไลน์ (พร้อมวันที่แก้ไขในอดีตในสนามเด็กเล่นไม่เป็นไร)


6
และคุณสามารถใช้เป็นสตริงดังนี้s := "Actual time is: "+time.Now().String()
Michael

3

ค้นหาข้อมูลเพิ่มเติมในโพสต์นี้: รับวันที่และเวลาปัจจุบันในรูปแบบต่างๆใน golang

นี่คือรสชาติของรูปแบบต่างๆที่คุณจะพบในโพสต์ก่อนหน้านี้:

ป้อนคำอธิบายภาพที่นี่


2

ในฐานะที่เป็นเสียงสะท้อนต่อการตอบสนองของ @ Bactisme วิธีที่เราจะเรียกคืนการประทับเวลาปัจจุบัน (ในหน่วยมิลลิวินาทีเป็นต้น) คือ:

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

แหล่งข้อมูล: https://gobyexample.com/epoch


0

https://golang.org/src/time/format.go ที่ระบุสำหรับเวลาในการแยกวิเคราะห์15จะใช้เป็นชั่วโมง04ใช้เป็นนาที05เป็นวินาที

สำหรับการแยกวัน11, Jan, Januaryสำหรับเดือน, 02, Mon, Mondayสำหรับวันของเดือน2006สำหรับปีและแน่นอนMSTสำหรับโซน

แต่คุณสามารถใช้เลย์เอาต์นี้ได้เช่นกันซึ่งฉันพบว่าง่ายมาก "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

การสาธิต


-4

เพื่อตอบคำถามที่แน่นอน:

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

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

ขอบคุณ Suran สิ่งนี้มีประโยชน์เมื่อต้องส่งการประทับเวลาข้าม grpc
rajeshk
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.