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
相关推荐
星火开发设计3 分钟前
Java面向对象三大特性:封装、继承与多态的深度解析及实战
java·开发语言·microsoft·多态·继承·面向对象·封装
旅途中的宽~20 分钟前
【Python】pip install -v e .命令不想自动更新torch版本
开发语言·python·pip
lly20240622 分钟前
Vue3 指令详解
开发语言
_OP_CHEN36 分钟前
【从零开始的Qt开发指南】(二十三)Qt 界面优化之 QSS 实战指南:从入门到精通,让你的界面颜值飙升!
开发语言·c++·qt·前端开发·界面美化·qss·客户端开发
e***985739 分钟前
Java性能优化实战:从原理到案例
java·开发语言·性能优化
HellowAmy41 分钟前
我的C++规范 - 跳跃的对象
开发语言·c++·代码规范
lph00942 分钟前
QtMqtt 的编译与QT环境加载配置
开发语言·qt
崇山峻岭之间1 小时前
Matlab学习记录35
开发语言·学习·matlab
Marktowin1 小时前
Mybatis-Plus更新操作时的一个坑
java·后端
比奇堡派星星2 小时前
Linux OOM Killer
linux·开发语言·arm开发·驱动开发