python 开发 mysql 时区问题

最近给客户部署项目时,由于项目在开发过程中 pythonnow()utcnow() 的混合使用,导致部署环境变化时,数据库中的数据在时间展示上出现了bug

1、时区设置

  • 主要为标准时区UTC和北京时区CST,其中CST=UTC+8
  • linux 系统时区设置,点我
  • mysql 时区设置,点我

2、项目开发中的使用

  • 数据库中数据筛选的时间设置
  • 定时任务的时间设置

总结

  • 所有的Linux系统文件系统底层存储的都是UTC时间,也就是说都是自1970年0时0分0秒以来的UTC标准时间的秒数。
  • mysql 底层存储的时间为UTC时间,和设置的时区无关,而时区仅仅是在读取的时候,用以时间转化。
  • python 使用utcnow()获取的为UTC时间,使用now()获取的为系统时区的时间。

使用建议

  • mysql时区设置为本地时区
    • 原因:因为数据库中的数据本身就是为展示使用,在开发的项目无国际化需求的时候,建议使用本地时区也就是CST,此时前端可以直接展示。
  • 系统时区:尽量和mysql时区保持一致
    • 原因:1、mysql使用UTC时区时,系统也使用UTC时区,此时前端的时间展示统一进行+8h处理;2、mysql使用CST时区时,系统也使用CST时区,虽然只要mysql使用CST时区时,前端即可直接显示,不用处理,但是此时 pythonnow()utcnow()值相同,均比CST8h,在同数据库进行比较时,需要使用+8h处理,简直自找麻烦。
  • 定时任务:使用CSTUTC均可,可自行选择。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 概念解释 时区(Timezone) 为什么会将地球分为不同时区呢?因为地球总是自西向东自转,东边总比西边先看到太阳...
    黑炭妈阅读 7,035评论 0 5
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,242评论 19 139
  • groupadd,useradd,passwd,gpasswd,id,su groupadd image.png ...
    香吉矢阅读 3,387评论 0 3
  • 什么是数据库? 数据库是存储数据的集合的单独的应用程序。每个数据库具有一个或多个不同的API,用于创建,访问,管理...
    chen_000阅读 4,072评论 0 19
  • 太阳出来了…… 你眉头开了,所以我笑了…… 每一个人在我的人生中出场是有顺序的,顺序打乱必有代价可付,你不能我不愿...
    Lady刘阅读 220评论 2 1