Skip to content

Commit

Permalink
- 添加一个 Time.IsDST() 方法,判断当前时间是否夏令时。
Browse files Browse the repository at this point in the history
- 添加一个与 `Time.Round` 类似的 `Time.Truncate` 方法,该方法始终向下取整到最接近给定 `d` 的时间(详情查看注释)。
  • Loading branch information
baagod committed Dec 24, 2024
1 parent c692a83 commit 25a6358
Showing 1 changed file with 19 additions and 2 deletions.
21 changes: 19 additions & 2 deletions thru.go
Original file line number Diff line number Diff line change
Expand Up @@ -368,14 +368,26 @@ func (t Time) In(loc *time.Location) Time {
//
// - 舍入 15 分钟:t.Round(15 * time.Minute)
//
// 跃点:14:00:00, 14:15:00, 14:30:00, 14:45:00
// 跃点:--- 14:00:00 --- 14:15:00 --- 14:30:00 -- t --- 14:45:00 ---
//
// 时间 14:35:29.650 处在 14:30:00 (上一个跃点) 和 14:45:00 (下一个跃点) 之间,
// 时间 14:35:29.650 处在 14:30 (上一个跃点) 和 14:45 (下一个跃点) 之间,
// 距离上一个跃点最近,故返回上一个跃点时间:14:30:00。
func (t Time) Round(d time.Duration) Time {
return Time{time: t.time.Round(d)}
}

// Truncate 与 Round 类似,但是 Truncate 永远返回指向过去时间的 "跃点",不会进行四舍五入。
//
// 可视化理解:
//
// ---|-------|-------|-------|---- 时间线
// d1 t d2 d3
//
// Truncate 将永远返回 d1,如果时间 t 正好处于某个 "跃点" 位置,返回 t。
func (t Time) Truncate(d time.Duration) Time {
return Time{time: t.time.Truncate(d)}
}

// Time 返回 time.Time
func (t Time) Time() time.Time {
return t.time
Expand Down Expand Up @@ -498,6 +510,11 @@ func (t Time) ZeroOr(u Time) Time {
return t
}

// IsDST 返回时间是否夏令时
func (t Time) IsDST() bool {
return t.time.IsDST()
}

// IsLeap 返回 year 是否闰年
func IsLeap(year int) bool {
return year%4 == 0 && (year%100 != 0 || year%400 == 0)
Expand Down

0 comments on commit 25a6358

Please sign in to comment.