使用beego/go mysql /JavaScript 遇到的时间坑以及ISO-8601标准

时间:16-01-21 栏目:技术 作者:liva 评论:1 点击: 7,057 次

在时间格式的处理上,一直纠结用什么格式比较好,刚开始考虑过时间戳,自定义时间格式,后来为了和国际接轨,采用了标准的时间格式: RFC3339, RFC2822, ISO8601

go语言对各个标准语言定义:

坑一:
时间格式转换,考虑了好久,查阅了好多资料,当初采用了 2016-01-21 14:30:50 这种格式的时间,后来总感觉这种方式不太好,主要是跨时区的问题,如果采用这种格式的时间,时区必须要统一,而且转换这种格式的时间一般要自定义转换函数,到底有没有一种统一的转换方式呢,我需要一个标准的,这个不需要去自己搞创新,于是最终选择了RFC3339 ISO-8601标准,从实际的操作来看,JavaScript和go都对这一格式有很好的支持,并且从实际的测试中看,json转换的时候,一般会把时间变量转成这个格式,请看下面一段go语言代码:

 

 

这段代码很简单,生成当前时间,并且用json序列化,输出的结果如下:

 

我在使用angularjs 的http post提交时候,同样会把时间变量转换成这样格式的字符串.

知道了这些知识,那就好办了,就用这个格式的时间.

javascript也天生对这个格式的时间支持很好,貌似低版本的IE支持并不好,测试代码:

 

 

坑二,

和数据库时区匹配问题,我在项目中采用了beego的orm,在每次保存时间的时候都要转换成UTC的时间保存到数据库,然后,读取时间的时候安装本地时区,这里就出问题了,时区本来应该是UTC的时区,这里beego认为是本地的时区,比如我们在+8时区,产生的结果是时间慢了8小时,这个解决办法就是,让beego在保存时间的时候采用+8时区的时间,读取时间的时候同样采用+8时区的时间.

 
这里我会在连接数据库的时候,制定采用Asia/Shanghai的时区

然后让beego也采用+8时区的时间

 
默认会采用time.Local()的时区,如果能确定你的服务器所在时区也是这个,你可以不用设置,但是以防万一,还是把时间强制改成这个时区,这样可以与系统时区剥离开.

 

至于时间的转换,就不多提了,网上有大把资料,有问题欢迎留言,如果你有更好地解决时间问题也欢迎指导.

声明: 本文由( liva )原创编译,转载请保留链接: 使用beego/go mysql /JavaScript 遇到的时间坑以及ISO-8601标准

使用beego/go mysql /JavaScript 遇到的时间坑以及ISO-8601标准:目前有1 条留言

  1. 沙发
    深圳口腔 China Google Chrome Windows :

    时间不是同步到嘛

    2016-01-28 上午 10:25 [回复]

发表评论


购物推荐

赞助商

© 2013 enjoydiy.com. Design by zijiao. 64 queries in 0.263 seconds, using 21.53MB memory