go 时间转时间戳的时区设置问题

昨天遇到一个问题,在完成时间转换时间戳,在后续测试中发现转换后的时间戳转成时间后,时间发生错误,时间和转换时间不一致问题

如下:

复制代码
package main

import (
	"fmt"
	"time"
)

func main() {
	Start := "2024-08-07 14:15:13"
	End := "2024-08-08 14:15:13"
	Layout := "2006-01-02 15:04:05" // 格式

	StartTime, err := time.Parse(Layout, Start)
	if err != nil {
		return
	}
	EndTime, err := time.Parse(Layout, End)
	if err != nil {
		return
	}
	duration := EndTime.Sub(StartTime)
	Hours := uint(duration.Hours())
	// 获取Unix时间戳(秒)
	Startstamp := StartTime.Unix()
	Endstamp := EndTime.Unix()
	msg := fmt.Sprintf("hours: %d, start: %d, end: %d", Hours, Startstamp, Endstamp)
	print(msg)
}

结果:hours: 24, start: 1723040113, end: 1723126513

time.Parse函数可以用来将时间字符串按照指定的布局解析成time.Time类型,但是它默认使用UTC时区,所以转换成时间戳在转成时间和实际相差8小时,需要 time.LoadLocation设置时区,如下:

复制代码
package main

import (
	"fmt"
	"time"
)

func main() {
	Start := "2024-08-07 14:15:13"
	End := "2024-08-08 14:15:13"
	Layout := "2006-01-02 15:04:05" // 格式

	locationName := "Asia/Shanghai"

	// 根据时区名称加载时区
	location, err := time.LoadLocation(locationName)
	if err != nil {
		fmt.Println("时区加载失败:", err)
		return
	}

	StartTime, err := time.ParseInLocation(Layout, Start, location)
	if err != nil {
		return
	}
	EndTime, err := time.ParseInLocation(Layout, End, location)
	if err != nil {
		return
	}
	duration := EndTime.Sub(StartTime)
	Hours := uint(duration.Hours())
	// 获取Unix时间戳(秒)
	Startstamp := StartTime.Unix()
	Endstamp := EndTime.Unix()
	msg := fmt.Sprintf("hours: %d, start: %d, end: %d", Hours, Startstamp, Endstamp)
	print(msg)
}

结果: hours: 24, start: 1723011313, end: 1723097713
相关推荐
zdl6869 分钟前
Spring Boot文件上传
java·spring boot·后端
世界哪有真情12 分钟前
哇!绝了!原来这么简单!我的 Java 项目代码终于被 “拯救” 了!
java·后端
RMB Player13 分钟前
Spring Boot 集成飞书推送超详细教程:文本消息、签名校验、封装工具类一篇搞定
java·网络·spring boot·后端·spring·飞书
努力中的编程者14 分钟前
二叉树(C语言底层实现)
c语言·开发语言·数据结构·c++·算法
重庆小透明19 分钟前
【搞定面试之mysql】第三篇 mysql的锁
java·后端·mysql·面试·职场和发展
大尚来也26 分钟前
PHP 反序列化漏洞深度解析:从原理利用到 allowed_classes 防御实战
android·开发语言·php
雕刻刀28 分钟前
ERROR: Failed to build ‘natten‘ when getting requirements to build wheel
开发语言·python
qq_4160187229 分钟前
高性能密码学库
开发语言·c++·算法
小碗羊肉38 分钟前
【从零开始学Java | 第十八篇】BigInteger
java·开发语言·新手入门
宵时待雨40 分钟前
C++笔记归纳14:AVL树
开发语言·数据结构·c++·笔记·算法