liujuanjuan1984 / ucanuupnobb

you can you up, no bb. 自学 python 编程过程中的挑战、笔记及我的践友们。
18 stars 9 forks source link

【需求】‘2019-08-02T15:23:24.655274+08:00’ 如何处理时区信息? #43

Open liujuanjuan1984 opened 5 years ago

liujuanjuan1984 commented 5 years ago

att

liujuanjuan1984 commented 5 years ago

https://www.imooc.com/article/276625

liujuanjuan1984 commented 5 years ago

to_char(created_at,'yyyy-mm-dd hh24:mi:ss')

liujuanjuan1984 commented 5 years ago

https://www.cnblogs.com/smileFL/p/8473245.html

liujuanjuan1984 commented 5 years ago

搜了很多文章,还是没能解决。一般是对数据库配置修改实现时区调整。 我想要实现:不对数据源做修改,仅通过sql的select 语句,把 有时区属性的timestamp 改成没有时区属性的timestamp ?——或通过其它方式转换,使得date_format()之类的函数可使用。

liujuanjuan1984 commented 5 years ago

经工程师提醒, https://www.postgresql.org/docs/9.6/functions-datetime.html#FUNCTIONS-DATETIME-EXTRACT 【浏览了下, 但还很深奥】

mysql 换成 postgres 搜到答案了。。

liujuanjuan1984 commented 5 years ago

select created_at, date_part('month',created_at) as monthx, to_char(date_trunc('month',created_at),'yyyy-mm') as monthy, to_char(date_trunc('week',created_at),'yyyy-ww') as weeky from comments

limit 20

liujuanjuan1984 commented 5 years ago

解决编程问题时,就好像解谜,并不太需要很多脑力,只是线索错乱,或者自己对某些线索选择性忽视,抽丝剥茧,找到线索很快就解决了。我把它当做可静心的游戏。

liujuanjuan1984 commented 5 years ago

不过我在本地mysql操作时,完全无问题;当我在数据可视化工具grafana上实操统计xue.cn的数据时,却遇到了报错: image 后来发现,一是因为xue.cn 生产环境数据库中的日期数据是带有时区的timestamp,另一个原因特别神奇:自从直接与数据库互动进行统计分析以来,我一直用mysql作为关键词来搜索答案,且每次总能有用……但其实我们的数据库是postgres。恰恰在日期处理的函数方面,mysqlpostgres有一些不同。

liujuanjuan1984 commented 5 years ago

我想按月统计,但两种写法在grafana上都报错。我直接本地mysql执行没问题。date_trunk 参考了https://stackoverflow.com/questions/46713402/sql-function-trunctimestamp-without-time-zone-unknown-does-not-exist 也报错。

liujuanjuan1984 commented 5 years ago

应该是 created_at 带着 timezone 信息,看看把它们统一转换成 UTC 或 某个时区,去掉 timezone 吧

‘2019-08-02T15:23:24.655274+08:00’