ฉันมีtime.Time
ค่าที่ได้รับtime.Now()
และฉันต้องการได้รับอีกครั้งซึ่งตรงกับ 1 เดือนที่แล้ว
ฉันรู้ว่าการลบเป็นไปได้ด้วยtime.Sub()
(ซึ่งต้องการอีกอันtime.Time
) แต่นั่นจะส่งผลให้ a time.Duration
และฉันต้องการมันในทางอื่น
ฉันมีtime.Time
ค่าที่ได้รับtime.Now()
และฉันต้องการได้รับอีกครั้งซึ่งตรงกับ 1 เดือนที่แล้ว
ฉันรู้ว่าการลบเป็นไปได้ด้วยtime.Sub()
(ซึ่งต้องการอีกอันtime.Time
) แต่นั่นจะส่งผลให้ a time.Duration
และฉันต้องการมันในทางอื่น
คำตอบ:
ลองAddDate :
package main
import (
"fmt"
"time"
)
func main() {
now := time.Now()
fmt.Println("now:", now)
then := now.AddDate(0, -1, 0)
fmt.Println("then:", then)
}
ผลิต:
now: 2009-11-10 23:00:00 +0000 UTC
then: 2009-10-10 23:00:00 +0000 UTC
สนามเด็กเล่น: http://play.golang.org/p/QChq02kisT
Sub
เพื่อลบเวลา ดุ!
เพื่อตอบสนองต่อความคิดเห็นของ Thomas Browne เนื่องจากคำตอบของ lnmxใช้ได้เฉพาะกับการลบวันที่เท่านั้นนี่คือการปรับเปลี่ยนรหัสของเขาที่ใช้สำหรับการลบเวลาออกจากเวลาประเภทเวลา
package main
import (
"fmt"
"time"
)
func main() {
now := time.Now()
fmt.Println("now:", now)
count := 10
then := now.Add(time.Duration(-count) * time.Minute)
// if we had fix number of units to subtract, we can use following line instead fo above 2 lines. It does type convertion automatically.
// then := now.Add(-10 * time.Minute)
fmt.Println("10 minutes ago:", then)
}
ผลิต:
now: 2009-11-10 23:00:00 +0000 UTC
10 minutes ago: 2009-11-10 22:50:00 +0000 UTC
ไม่ต้องพูดถึงคุณยังสามารถใช้time.Hour
หรือใช้time.Second
แทนได้time.Minute
ตามความต้องการของคุณ
สนามเด็กเล่น: https://play.golang.org/p/DzzH4SA3izp
ParseDuration
ค่าคงที่! เพียงแค่ใช้-10 * time.Minute
นั่นคือสิ่งที่ค่าคงที่กำหนดไว้ เพียงแค่time.Now().Add(-10 * time.Minute)
เป็นสิ่งที่คุณต้องการ
now.Add(-10 * time.Minute)
ไปnow.Add(time.Duration(-10) * time.Minute)
ในกรณีที่คุณได้รับข้อผิดพลาดเมื่อคูณระยะเวลาโดยค่า int ...
คุณสามารถลบล้างtime.Duration
:
then := now.Add(- dur)
คุณสามารถเปรียบเทียบtime.Duration
กับ0
:
if dur > 0 {
dur = - dur
}
then := now.Add(dur)
คุณสามารถดูตัวอย่างการทำงานได้ที่http://play.golang.org/p/ml7svlL4eW
-1 * dur
จะใช้งานได้ แต่d := -1 ; dur = d * dur
จะสร้างข้อผิดพลาด: "mismatched types int and time.Duration"
มีtime.ParseDuration
ที่มีความสุขจะยอมรับระยะเวลาเชิงลบตามคู่มือ ไม่เช่นนั้นก็ไม่จำเป็นต้องลบล้างระยะเวลาที่คุณจะได้ระยะเวลาที่แน่นอนตั้งแต่แรก
เช่นเมื่อคุณต้องการลบล้างหนึ่งชั่วโมงครึ่งคุณสามารถทำได้ดังนี้:
package main
import (
"fmt"
"time"
)
func main() {
now := time.Now()
fmt.Println("now:", now)
duration, _ := time.ParseDuration("-1.5h")
then := now.Add(duration)
fmt.Println("then:", then)
}