Package time
import "time"
func Date
func Date(year int, month Month, day, hour, min, sec, nsec int, loc *Location) Time
日期返回對應
yyyy-mm-dd hh:mm:ss + nsec nanoseconds
在給定位置,那個時候適當區的時間。
月,日,小時,分,秒和nsec值可能超出其常規範圍,並且在轉換過程中將被歸一化。例如, 例如,10月32日轉換爲11月1日。
夏令時轉換跳過或重複次數。以 爲例,在美國2011年3月13日凌晨2點15分從未發生過,而2011年11月6日凌晨1點15分發生了兩次。在這種情況下,時區的選擇以及時間選擇不明確。日期 返回在 轉換中涉及的兩個區域中的一個區域中正確的時間,但不能保證哪個時間。
如果loc爲零,則日期發生混亂。他們通常的範圍之外
月和日值將常態化。例如,月的時間間隔的第一天和最後一天,
package main
import (
"fmt"
"os"
"time"
)
func monthInterval(t time.Time) (firstDay, lastDay time.Time) {
y, m, _ := t.Date()
loc := t.Location()
firstDay = time.Date(y, m, 1, 0, 0, 0, 0, loc)
lastDay = time.Date(y, m+1, 1, 0, 0, 0, -1, loc)
return firstDay, lastDay
}
func main() {
t := time.Now()
fmt.Println(t.Round(0))
first, last := monthInterval(t)
fmt.Println(first)
fmt.Println(last)
dstLoc, err := time.LoadLocation("America/Los_Angeles")
if err != nil {
fmt.Fprintln(os.Stderr, err)
return
}
// Sunday, March 12, 2017, 2:00:00 am to Sunday, March 12, 2017, 3:00:00 am
dstStart := time.Date(2017, 03, 12, 2+1, 0, 0, 0, dstLoc)
// Sunday, November 5, 2017, 2:00:00 am to Sunday, November 5, 2017, 1:00:00 am
dstEnd := time.Date(2017, 11, 5, 2-1, 0, 0, 0, dstLoc)
t = dstStart
fmt.Println()
fmt.Println(t)
first, last = monthInterval(t)
fmt.Println(first)
fmt.Println(last)
t = dstEnd.Add(time.Hour)
fmt.Println()
fmt.Println(t)
first, last = monthInterval(t)
fmt.Println(first)
fmt.Println(last)
}
輸出:
2017-10-27 05:45:08.197312082 -0400 EDT
2017-10-01 00:00:00 -0400 EDT
2017-10-31 23:59:59.999999999 -0400 EDT
2017-03-12 03:00:00 -0700 PDT
2017-03-01 00:00:00 -0800 PST
2017-03-31 23:59:59.999999999 -0700 PDT
2017-11-05 01:00:00 -0800 PST
2017-11-01 00:00:00 -0700 PDT
2017-11-30 23:59:59.999999999 -0800 PST
'LastDay'不會是正確的,如果有,或從DST在最後一天的過渡在當地時區的月份。 –