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

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

列出當前日期/月份的天數

列出當前日期/月份的天數

Go
呼如林 2023-02-21 12:56:50
如何列出當前日期/月份的天數?Exp: 一月有 31 天所以 1 2 3 4 到 31
查看完整描述

3 回答

?
慕的地6264312

TA貢獻1817條經驗 獲得超6個贊

保持簡單。


Go 時間包標準化日期:


月、日、小時、分鐘、秒和納秒值可能超出它們通常的范圍,并且將在轉換過程中被歸一化。例如,10 月 32 日轉換為 11 月 1 日。


對于一個月中的天數


func DaysInMonth(t time.Time) int {

    y, m, _ := t.Date()

    return time.Date(y, m+1, 0, 0, 0, 0, 0, time.UTC).Day()

}

對于一個月中的天數列表


func ListDaysInMonth(t time.Time) []int {

    days := make([]int, DaysInMonth(t))

    for i := range days {

        days[i] = i + 1

    }

    return days

}


查看完整回答
反對 回復 2023-02-21
?
慕碼人8056858

TA貢獻1803條經驗 獲得超6個贊

一個月中的天數始終介于1給定月份的天數之間。所以主要任務是確定給定月份的天數。


該time包不公開此類功能,但您可以使用以下技巧:


// Max days in year y1, month M1

t := time.Date(y1, M1, 32, 0, 0, 0, 0, time.UTC)

daysInMonth := 32 - t.Day()

這背后的邏輯是該天數32大于任何月份的最大天數。它將自動歸一化(額外的天數滾動到下個月,天數適當減少)。當我們從 中減去歸一化后的天數時32,我們會得到該月的最后一天。


此片段取自答案time.Since() with months and years。


[]int所以這里有一個小幫手,它返回給定的一個月中的天數time.Time:


func daysInMonth(t time.Time) []int {

    t = time.Date(t.Year(), t.Month(), 32, 0, 0, 0, 0, time.UTC)

    daysInMonth := 32 - t.Day()

    days := make([]int, daysInMonth)

    for i := range days {

        days[i] = i + 1

    }

    return days

}

測試它:


fmt.Println(daysInMonth(time.Date(2022, 1, 1, 0, 0, 0, 0, time.UTC)))

fmt.Println(daysInMonth(time.Date(2022, 2, 1, 0, 0, 0, 0, time.UTC)))

fmt.Println(daysInMonth(time.Date(2020, 2, 1, 0, 0, 0, 0, time.UTC)))

輸出(在 Go Playground 上嘗試):


[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31]

[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28]

[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29]

另一個不太有效的選擇是將日期回滾到該月的第一天,并開始添加天數直到月份發生變化。這就是它的樣子:


func daysInMonth(t time.Time) []int {

    var days []int


    // Roll back to day 1

    t = time.Date(t.Year(), t.Month(), 1, 0, 0, 0, 0, time.UTC)

    m := t.Month()

    for t.Month() == m {

        days = append(days, t.Day())

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

    }


    return days

}

這將輸出相同的。在Go Playground試試這個。


由于所有月份至少包含 28 天,我們可以優化上述解決方案以滾動到第 29 天,并從那里開始檢查和遞增:


func daysInMonth(t time.Time) []int {

    days := make([]int, 28, 31)

    for i := range days {

        days[i] = i + 1

    }


    m := t.Month()

    // Roll to day 29

    t = time.Date(t.Year(), t.Month(), 29, 0, 0, 0, 0, time.UTC)

    for t.Month() == m {

        days = append(days, t.Day())

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

    }


    return days

}

在Go Playground試試這個。



查看完整回答
反對 回復 2023-02-21
?
瀟瀟雨雨

TA貢獻1833條經驗 獲得超4個贊

有很多方法可以完成它,因為我們主要處理常量,如果是閏年(29 天),我們只需要處理二月。


package main


import (

    "fmt"

    "time"

)

func main() {

    fmt.Println(list_of_days())

}


func list_of_days() []int {

    non_leap_year := map[string]int{

        "January":   31,

        "February":  28,

        "March":     31,

        "April":     30,

        "May":       31,

        "June":      30,

        "July":      31,

        "August":    31,

        "September": 30,

        "October":   31,

        "November":  30,

        "December":  31,

    }


    leap_year := map[string]int{

        "January":   31,

        "February":  29,

        "March":     31,

        "April":     30,

        "May":       31,

        "June":      30,

        "July":      31,

        "August":    31,

        "September": 30,

        "October":   31,

        "November":  30,

        "December":  31,

    }

    //get the current month

    year, month, _ := time.Now().Date()

    

    //handle leap year

    no_of_days := 0

    if year%4 == 0 && year%100 != 0 || year%400 == 0 {

        no_of_days = leap_year[month.String()]

    } else {

        no_of_days = non_leap_year[month.String()]

    }


    days := make([]int, no_of_days)

    for i := range days {

        days[i] = i + 1

    }

    return days

}



查看完整回答
反對 回復 2023-02-21
  • 3 回答
  • 0 關注
  • 180 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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