第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

Golang - 從 YearDay int32 中查找月份和日期

Golang - 從 YearDay int32 中查找月份和日期

Go
楊__羊羊 2022-06-13 15:31:47
我有一個固定的數(shù)據(jù)結(jié)構(gòu),其中包含 YearDay 和 TimeOfDay 字段。YearDay 是當(dāng)年過去的天數(shù),TimeOfDay 是當(dāng)天過去的秒數(shù)(最多 86400)。YearDay 是 int32,而 TimeOfDay 是 float64。我想將其轉(zhuǎn)換為 time.Now().UnixNano() 形式,但不確定如何轉(zhuǎn)換。時間模塊有一個 YearDay(),但沒有給定 yearDay (int32)(可能是一年)的反函數(shù)來給我當(dāng)月的月份和日期。理想情況下,我想以某種方式解析d := time.Date(time.Year(), month, day, hour, min, sec, ms, time.UTC)其中月、日、小時、分鐘、秒、毫秒以某種方式預(yù)先確定,或者我可以輕松轉(zhuǎn)換為我想要的任何形式的等價物(但主要是 UnixNano())。我最好的想象是一個復(fù)雜的 switch 語句,減去 31, 28(29), 30, 31 ... 并查看 int 何時最終為負(fù)以找到月份和日期,但它必須是兩個 switch 語句閏年檢查以選擇使用哪個開關(guān)塊,同時在 TimeOfDay 上進(jìn)行多項余數(shù)計算。有沒有更簡單更干凈的方法?編輯:我最終在玩弄它時制作了以下功能,但我肯定會使用 Icza 的解決方案。很高興知道日子會溢出。謝謝!func findMonthAndDay(yearDay int32) (int32, int32) {    year := time.Now().Year()    isLeapYear := year%400 == 0 || year%4 == 0 && year%100 != 0 // Calculates if current year is leapyear    // Determines which array to send to for loop    var monthsOfYear [12]int32    if isLeapYear {        monthsOfYear = [12]int32{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}    } else {        monthsOfYear = [12]int32{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}    }    var currentMonth int32    var currentDayInMonth int32    // Loop through array of months    for i := range monthsOfYear {        // If yearDay - next month #OfDays positive, not correct month        if yearDay-monthsOfYear[i] > 0 {            // Subtract month #OfDays and continue            yearDay = yearDay - monthsOfYear[i]        } else {            currentMonth = int32(i + 1) // Month found (+1 due to index at 0)            currentDayInMonth = yearDay // Remainder of YearDay is day in month            break        }    }    return currentMonth, currentDayInMonth}
查看完整描述

1 回答

?
郎朗坤

TA貢獻(xiàn)1921條經(jīng)驗 獲得超9個贊

您可以使用Time.AddDate()將天數(shù)添加到time.Time值中。添加大于 31 的天數(shù)是可以的,實現(xiàn)對結(jié)果進(jìn)行歸一化。


并轉(zhuǎn)換TimeOfDay為time.Duration并使用Time.Add()來添加它。轉(zhuǎn)換為 時time.Duration,我們可以將其乘以1e9得到納秒數(shù),因此將保留小數(shù)秒。


例子:


t := time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC)

fmt.Println(t)


var yearDay int32 = 100

var timeOfDay float64 = 70000.5


t = t.AddDate(0, 0, int(yearDay))

t = t.Add(time.Duration(timeOfDay * 1e9))


fmt.Println(t)

fmt.Println("Unix:", t.Unix())

fmt.Println("UnixNano:", t.UnixNano())

輸出(在Go Playground上試試):


2020-01-01 00:00:00 +0000 UTC

2020-04-10 19:26:40.5 +0000 UTC

Unix: 1586546800

UnixNano: 1586546800500000000


查看完整回答
反對 回復(fù) 2022-06-13
  • 1 回答
  • 0 關(guān)注
  • 164 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號