เวลาเป็นศูนย์เวลาใน Go คืออะไร?


157

ในสภาพข้อผิดพลาดฉันพยายามที่จะกลับnilซึ่งโยนข้อผิดพลาด:

cannot use nil as type time.Time in return argument

เป็นสิ่งที่zeroคุ้มค่าสำหรับtime.Time?


30
และคุณสามารถใช้IsZero()เพื่อตรวจจับเวลาเป็นศูนย์
Matt

คำตอบ:


156

การเรียกใช้time.Timeตัวอักษร struct ที่ว่างเปล่าจะส่งคืนค่าศูนย์ของ Go ดังนั้นสำหรับคำสั่งพิมพ์ต่อไปนี้:

fmt.Println(time.Time{})

ผลลัพธ์คือ:

0001-01-01 00:00:00 +0000 UTC

เพื่อความสมบูรณ์เอกสารทางการระบุอย่างชัดเจน:

ค่าศูนย์ของประเภทเวลาคือ 1 มกราคมปี 1, 00: 00: 00.000000000 UTC


7
"ไม่ผ่านการขัดแย้ง" ทำให้ฟังดูเหมือนเป็นการเรียกใช้ฟังก์ชัน มันเป็นตัวอักษร struct ที่ไม่มีฟิลด์ที่ระบุ X {} คือค่าศูนย์ของ struct X สำหรับ X ใด ๆ
Russ Cox

1
@RussCox ฉันไม่คิดว่าเป็นเรื่องจริง ในกรณีของฉันฉันมีเขตเวลาเวลาในโครงสร้างของฉันซึ่งมีแอตทริบิวต์ 'ละเว้น' หากฉันไม่ได้ตั้งค่านั้นมันจะถูกตั้งค่าเป็น 0001-01-01 00:00:00 +0000 UTC โดยอัตโนมัติแทนที่จะถูกละเว้น
Gaurav Ojha


302

คุณควรใช้ฟังก์ชัน Time.IsZero () แทน:

func (Time) IsZero

func (t Time) IsZero() bool
IsZero reports whether t represents the zero time instant, January 1, year 1, 00:00:00 UTC.

แน่นอนถ้าเปรียบเทียบว่าค่าที่กำหนดเวลาเป็นศูนย์หรือไม่นี่คือสิ่งที่ควรใช้จริง ๆ
Gaurav Ojha

7
ในขณะที่นี่คือคำตอบที่ถูกต้องสำหรับการเปรียบเทียบ OP ไม่ได้ถามเกี่ยวกับการเปรียบเทียบ แต่จะทำอย่างไรเพื่อเริ่มต้นค่าศูนย์ คำตอบที่ยอมรับนั้นถูกต้อง
mikijov

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