ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

syf的开发笔记-4 go的时间获取

2020-01-28 22:53:45  阅读:199  来源: 互联网

标签:UTC syf yesterdayEndTime PRCTime 笔记 时间 time go Now


工作之后第一次过年回家就碰到了武汉肺炎这个事情

要在家办公很久 可能沟通效率会低一点

这次在家要待很久 也算对父母的一种补偿吧

毕竟大学我一共就有三个寒假在家 其他的假期不是在实习就是在训练

不过要不是有这些假期的准备 也没我现在的工作和好朋友吧

所以这大概也算因祸得福?

 

然后说说最近在家害改了一个有关时区的bug

因为最近写了一个日报邮件的功能

在每天凌晨五点给订阅人发送前一天的项目任务的标注情况

第一步显然就是获取前一天的日期

因为系统是部署在k8s容器里的

所以容器里直接取time.Now()是UTC时间 不是北京时间

所以第一版获取前一天的函数我是这么写的

func GetYesterday() (time.Time, time.Time) {
	PRCTime, _ := time.LoadLocation("Asia/Shanghai")
	year, month, day := time.Unix(time.Now().UTC().In(PRCTime).Add(-24*time.Hour).Unix(), 0).Date()
	yesterdayStart := time.Date(year, month, day, 0, 0, 0, 0, PRCTime)
	yesterdayEndTime := time.Date(year, month, day, 23, 59, 59, 0, PRCTime)

	return yesterdayStart, yesterdayEndTime
}

 

最早的第一版time.Now()的.UTC()我都没写

后来经过朝滨提醒 知道这还是要加个UTC的

毕竟UTC才是时间的标准

 

但是这么写每天获取前一天的时间还是不对

然后查了一下发现这个Date函数这么好像不太对

好像这么用是UTC时间的那个时间 在time.Local是多少

显然这个功能不是我想要的

应该是获取这个时间北京时间的时间戳

google了一些博客之后发现用time.ParseInLocation()这个函数才对

所以最终版是这个样子的

func GetYesterday() (time.Time, time.Time) {
	PRCTime, _ := time.LoadLocation("Asia/Shanghai")
	timeStr := time.Now().Format("2006-01-02")
	yesterdayStart, _ := time.ParseInLocation("2006-01-02", timeStr, PRCTime)
	yesterdayEndTime, _ := time.ParseInLocation("2006-01-02 15:04:05", timeStr+" 23:59:59", PRCTime)

	return yesterdayStart, yesterdayEndTime
}

 

总结一下

在使用时间的时候一定要先转城UTC时间

这样代码在哪里都可以跑 不管是容器还是服务器

然后就是要仔细了解函数的含义 不能主观臆断

最好直接看底层函数的注释 直接明了

标签:UTC,syf,yesterdayEndTime,PRCTime,笔记,时间,time,go,Now
来源: https://www.cnblogs.com/general10/p/12239206.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有