zoukankan      html  css  js  c++  java
  • syf的开发笔记-4 go的时间获取

    工作之后第一次过年回家就碰到了疫情这个事情

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

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

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

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

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

    在家晚上安安静静的听歌还是很棒的2333

    然后说说最近在家害改了一个有关时区的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 GetToday() (time.Time, time.Time) {
    	PRCTime, _ := time.LoadLocation("Asia/Shanghai")
    	timeStr := time.Unix(time.Now().UTC().In(PRCTime).Unix(), 0).In(PRCTime).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时间

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

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

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

  • 相关阅读:
    2020年封装APP之详解
    Linux 强制卸载硬盘 (Device is busy)
    pacman 非交互状态使用
    Snakemake 修改默认工作目录
    LaTeX 表格排版中遇到 Misplaced oalign
    重启崩溃的 KDE
    python robot.libraries.BuiltIn import BuiltIn库
    logging 常用配置
    paramiko 获取远程服务器文件
    物理时间使用Python脚本转格林卫时间
  • 原文地址:https://www.cnblogs.com/general10/p/12239206.html
Copyright © 2011-2022 走看看