时间问题详解

package time

import (
	"fmt"
	"testing"
	"time"
)

func TestTmp1(t *testing.T) {
	now := time.Now()

	// 打印的是本地时间。 同一时刻在不同地区的本地时间是不一致的。比如北京现在是八点。那么美国现在0点
	fmt.Println(now)

	// 将这个时间转换为时间戳。 无论你处在哪一个地区,此刻你们的时间戳都是相同的
	fmt.Println(now.Unix())

	// 获取指定时区。
	location, err := time.LoadLocation("America/New_York")
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(now.In(location)) // 2023-07-27 12:07:45.487313 -0400 EDT      -0400  表示偏移的小时和分钟。前两位是小时,后两位是分钟

	// UTC:协调时间时间; 各地本地时间都是根据这个时间产生不同的偏移的结果
	nowUTC := now.UTC() // 转换为 UTC 时间
	fmt.Println(nowUTC) // 打印 UTC 时间

	// ISO 8601 国际标准时间格式   2023-07-28T00:17:16+08:00         格式:日期T时间Z偏移
	fmt.Println(now.Format("2006-01-02T15:04:05Z07:00"))

}

1. 时间戳

  • 它是自1970年1月1日(00:00:00 UTC)以来的秒数
  • 同一时刻,在不同时区的时间戳是一样的。
  • 时间戳全球统一

2. 本地时间

  • 同一时刻,不同时区的本地时间是不一样的。比如某一时刻中国的本地时间是8点,美国的本地时间是0点
  • 本地时间是UTC时间的在时区偏移后的结果。
  • 所以一个时间戳,在不同时区存为当地的本地时间,时间是不一样的

3. UTC时间

  • UTC:协调世界时,是全球时间标准,所有的时间区域都是相对于UTC来定义的。
  • 例如东八区(China Standard Time),也就是北京时间,就是 UTC+8 小时。当协调世界时为12:00时,北京时间为20:00。

4. ISO 8601 日期和时间表示方式

  • YYYY-MM-DDTHH:MM:SS±hh:mm
    • YYYY: 年份
    • MM:月份
    • DD:天数
    • T:时间和日期的分隔符
    • HH:小时
    • MM:分钟
    • SS:秒
    • ±:分割符,时区偏移的正负
    • hh:偏移的小时
    • mm:偏移的分钟
  • 2023-07-28T00:42:00+08:00
  • 它同时提供了日期时间和时区信息
  • 它的格式是固定且严格的,非常适合在计算机系统中使用

你可能感兴趣的:(业务逻辑,go,go)