大家今天来跟大家聊聊我最近折腾 Go 语言里时间处理的那些事儿。标题“go time”,是不是听起来就挺有意思?就是字面意思,Go 语言的时间操作,哈哈。
捣鼓的起因
话说我最近在搞一个数据同步的小工具,需要把各种乱七八糟的时间格式统一一下。你知道的,不同系统导出来的时间,那叫一个五花八门,有带时区的,有不带时区的,有精确到秒的,还有精确到毫秒的,简直让人头大!
开始动手
我直接用 Go 的 time
包,发现这玩意儿还挺强大。我得把那些字符串格式的时间,转换成 Go 认识的 类型。
我用 这个函数,这里头有个坑,就是要提供一个时间的模板。Go 这家伙有点怪,它的时间模板不是我们常用的 "yyyy-MM-dd HH:mm:ss" 这种,而是 "2006-01-02 15:04:05", 第一次用的时候还有点不习惯,总觉得怪怪的,花一些时间才适应。
处理时区
搞定时间格式转换,接下来就是时区问题。有些时间是带时区信息的,比如 "2023-10-27T10:00:00+08:00",这种还 能直接搞定。但有些时间它就是光秃秃的,啥时区信息都没有,比如 "2023-10-27 10:00:00"。
这时候,我就得先用 加载一个时区,然后用 把这个时间转换到指定的时区。我一般都转成 UTC 时间,方便后续处理。
时间戳转换
有时候,我还需要把时间转换成时间戳,或者把时间戳转回时间。Go 里也挺方便, 可以把 转成秒级时间戳, 可以转成纳秒级时间戳。反过来, 可以把秒级时间戳转成 。
- * 使用要注意: 传入秒数,返回 * 对象。
- * 使用要注意: 传入纳秒数,返回 * 对象。
格式化输出
我还需要把处理好的时间,按照我想要的格式输出。 又派上用场,还是那个熟悉的 "2006-01-02 15:04:05" 模板,想怎么输出就怎么输出,简单又粗暴。
小结
一通折腾下来,总算把时间处理这块搞定。Go 的 time
包还是挺好用的,就是那个时间模板有点反直觉,得多用几次才能习惯。这回分享就到这里,希望能帮到大家!下次有啥好玩的,再来跟大家唠唠!