亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

達到 time.Now() 時進行循環

達到 time.Now() 時進行循環

Go
慕村225694 2023-06-01 14:26:02
在 Golang 中是否可以通過給定的日期變量增加 for 循環中的日期,直到達到當前日期/時間?,F在()// Start datet, _ := time.Parse(time.RFC3339, "2018-07-19T12:25:10.8584224+02:00")// Current datect := time.Now()for d := t; d.Day() == ct.Day(); d = d.AddDate(0, 0, 1) {    // Print all days between start date and current date     fmt.Println(d)}我希望變量 d 打印出所有日期(包括時間等),直到它到達當前日期
查看完整描述

4 回答

?
叮當貓咪

TA貢獻1776條經驗 獲得超12個贊

根據 godoc: https: //golang.org/pkg/time/#Time.Day

func (t Time) Day() int

Day 返回 t 指定的月中的第幾天。

所以比較 d.Day() 和 ct.Day() 不是正確的方法。如果今天是“2019-01-01”,你的開始時間是“2018-12-23”怎么辦?

比較兩個時間的正確方法。時間是https://golang.org/pkg/time/#Time.After

func (t Time) After(u Time) bool
func (t Time) Before(u Time) bool


After 報告時刻 t 是否在 u 之后。Before 報告時刻 t 是否在 u 之前。


所以@Alex Pliutau 的解決方案更常用。但今天需要更加小心。


package main


import (

    "fmt"

    "time"

)


func main() {

    t, _ := time.Parse(time.RFC3339, "2009-11-02T12:25:10.8584224+02:00")


    // truncate to 0:0:0

    t = t.Truncate(24 * time.Hour)

    fmt.Println("start time is:", t)


    // Current date truncate to 0:0:0

    ct := time.Now().Truncate(24 * time.Hour)

    fmt.Println("now is:", ct)

    fmt.Println("---------------")


    // for t.Before(ct) {  //if you don't want to print the date of today

    for !t.After(ct) {

        // Print all days between start date and current date

        fmt.Println(t.Format("2006-01-02 15:04:05"))

        t = t.AddDate(0, 0, 1)

    }

}

輸出:


start time is: 2009-11-02 02:00:00 +0200 +0200

now is: 2009-11-10 00:00:00 +0000 UTC

---------------

2009-11-02 02:00:00

2009-11-03 02:00:00

2009-11-04 02:00:00

2009-11-05 02:00:00

2009-11-06 02:00:00

2009-11-07 02:00:00

2009-11-08 02:00:00

2009-11-09 02:00:00

2009-11-10 02:00:00

https://play.golang.org/p/iMr7M5W9K4N


查看完整回答
反對 回復 2023-06-01
?
ITMISS

TA貢獻1871條經驗 獲得超8個贊

獲得正確的循環條件和..


package main


import (

    "fmt"

    "time"

)


func main() {

    fmt.Println("Hello, playground")

    t, _ := time.Parse(time.RFC3339, "2018-07-19T12:25:10.8584224+02:00")


    // Current date

    ct := time.Now()


    for d := t; d.Day() >= ct.Day(); d = d.AddDate(0, 0, 1) {

        // Print all days between start date and current date

        fmt.Println(d)

    }

}


Hello, playground

2018-07-19 12:25:10.8584224 +0200 +0200

2018-07-20 12:25:10.8584224 +0200 +0200

2018-07-21 12:25:10.8584224 +0200 +0200

2018-07-22 12:25:10.8584224 +0200 +0200

2018-07-23 12:25:10.8584224 +0200 +0200

2018-07-24 12:25:10.8584224 +0200 +0200

2018-07-25 12:25:10.8584224 +0200 +0200

2018-07-26 12:25:10.8584224 +0200 +0200

2018-07-27 12:25:10.8584224 +0200 +0200

2018-07-28 12:25:10.8584224 +0200 +0200

2018-07-29 12:25:10.8584224 +0200 +0200

2018-07-30 12:25:10.8584224 +0200 +0200

2018-07-31 12:25:10.8584224 +0200 +0200

https://play.golang.org/p/yRBTUZKfseG


查看完整回答
反對 回復 2023-06-01
?
慕運維8079593

TA貢獻1876條經驗 獲得超5個贊

package main


import (

    "fmt"

    "time"

)


func main() {

    t, _ := time.Parse(time.RFC3339, "2018-07-19T12:25:10.8584224+02:00")


    ct := time.Now()


    for t.Before(ct) {

        fmt.Println(t)

        t.AddDate(0, 0, 1)

    }

}


查看完整回答
反對 回復 2023-06-01
?
慕雪6442864

TA貢獻1812條經驗 獲得超5個贊

根據您的評論,您實際上需要將Format日期告訴它一些有價值的東西:


package main


import (

    "fmt"

    "log"

    "time"

)


func main() {

    start, err := time.Parse("2006-1-2", "2018-1-1")

    if err != nil {

        log.Fatal(err)

    }


    for d := start; d.Month() == start.Month(); d = d.AddDate(0, 0, 1) {

        fmt.Println(d.Format("2006-1-2"))

    }

}

這是您的代碼的更簡單版本(我使用了自定義時間格式,因為我不想編輯 RFC 語法,但最終它是同一件事)= 為了簡潔起見,我也在迭代 Month。


查看完整回答
反對 回復 2023-06-01
  • 4 回答
  • 0 關注
  • 188 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號