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
相关推荐
楼田莉子1 分钟前
高并发内存池项目:内存池性能分析及其优化
开发语言·c++·后端·学习
rannn_1113 分钟前
【Redis|实战篇4】黑马点评|分布式锁
java·数据库·redis·分布式·后端
是翔仔呐7 分钟前
第6章 UART串口通信!掌握单片机与外界的双向数据通道,实现跨设备交互
c语言·开发语言·单片机·嵌入式硬件·gitee
爱摸鱼的打工仔8 分钟前
【python知识点-Flask中的g对象】
后端
带娃的IT创业者9 分钟前
从本地开发到 PyPI发布:WeClaw 的 Python 包标准化之旅
开发语言·python
qiumingxun9 分钟前
【Go】Go语言基础学习(Go安装配置、基础语法)
服务器·学习·golang
2201_7586426410 分钟前
自定义内存检测工具
开发语言·c++·算法
吠品13 分钟前
QEMU Windows虚拟机NAT网络配置指南:实现IP自动获取与外部访问
开发语言·php
fpcc13 分钟前
C++编程实践—操作系统调优和内核旁支
开发语言·c++
umeelove3514 分钟前
Spring 循环依赖
java·后端·spring