首页 > 其他分享 >写一篇关于时区转换的 astimezome 的使用

写一篇关于时区转换的 astimezome 的使用

时间:2023-05-14 23:23:48浏览次数:48  
标签:astimezome 转换 一篇 astimezone utcnow datetime 时间 tz 时区

Python 内置的 datetime 模块真的很烂,默认的所有时间出来都是不带时区的,所以一般在时间的处理上面,我一般用三方的 arrow

但由于每次配置环境都要装 arrow 有时候很不方便,就想着尝试使用 datetime,想不到一用 就掉坑了。

 

在一次装换为美东时间的代码中,我尝试如下运行

d = datetime.datetime.utcnow()
tz = pytz.timezone('US/eastern')
us_time = d.astimezone(tz)

想不到这个逻辑是有问题的,还好在代码的运行中发现了该问题

首先跟前面讲的一样,datetime 取得的时间默认都是不带时区的,所以当你得到所谓的 utc 时间其实是一个不带时区的 utc 时间。

当你用 astimezone(tz_info)的时候,Python 的逻辑的是,将这个市区与你系统的时区进行比较,返回该时间

 

简单来说,当你的计算机是东八区,国内的时区,通过 utc 或者的时间会慢 8 个小时,但通过astimezone 的时候,

系统会将你的系统时区与你入参的时区计算,也就是国内比美东快 12 个小时。

所以通过上面的代码,你获取的时间是不对的,安装我的理解,得到的美东时间会慢 8 个小时。

 

从上面的错误可以看到,对于没有时区的 datetime 对象使用 astimezone 是非常危险的,也就是在进行 astimezone 之前需要将 datetime 对象附上时区

下面是两种解决方案

第一种

通过 datetime.datetime.utcnow()然后强制给他赋值一个 0 时区

datetime.datetime.utcnow().replace(tzinfo=pytz.UTC).astimezone(tz)

地第二种

将 datetime 或者的时间装换为本地的时区时间,操作非常简单,只要在获取的 now()时间后面加上 astimezone()用默认参数 None

datetime.datetime.now().astimezone().astimezone(tz)

两种方案,一种看不过比较一目了然,但有两个入参,

第二个看过去比较清爽简单

 

总体来看,我还是推荐第一种,应该代码写出来还是给人看的

 

标签:astimezome,转换,一篇,astimezone,utcnow,datetime,时间,tz,时区
From: https://www.cnblogs.com/sidianok/p/17400526.html

相关文章

  • 05 强制类型转换
    05强制类型转换作者:FL博客:https://www.cnblogs.com/flblogs/String将其他数据类型转换为String方式一:调用数据类型的toString()方法toString方法不会影响原变量,而是将转换的结果返回注意:toString方法不能转换null和unidentifiedvara=123;a=a.toString();......
  • 恒压,PID控制,模拟量转换学习成品恒压程序案例 1.pid控制; 2.模拟量
    恒压,PID控制,模拟量转换学习成品恒压程序案例1.pid控制;2.模拟量采集,转换;3.昆仑通态触摸屏;4.西门子S7-200PLC,自带模拟量输入,输出模块;5.采用PID闭环控制,模拟量转换已经建立专门的库,采集数据转换一步到位,方便,简洁,自动闭环控制等;6.无论是学习,还是实际应用,都是不错的程序。;(每......
  • Bilibili-XMLSubtitle-to-ASS可视化Bilibili本地视频XML弹幕转换ASS字幕转换器:新增自
    可视化Bilibili本地视频XML弹幕转换ASS字幕转换器一个可视化,打开即用的将B站弹幕转换为本地播放器可识别的ASS格式字幕的工具。另外这个工具还有一个妙用,如果你想看一部曾经在B站上存在过但现在下架了的电视剧/电影的弹幕,用这个工具也能多多少少帮你做到这一点,具体方式请往下看......
  • 台达触摸屏和vfd-m变频器通讯控制监视程序硬件:电脑或者台达B系列触摸屏,usb转485转换头
    台达触摸屏和vfd-m变频器通讯控制监视程序硬件:电脑或者台达B系列触摸屏,usb转485转换头,vfd-m变频器。功能:使用modbusrtu通讯方式,在触摸屏可以直接控制变频器,修改频率,修改控制命令和频率源,监控运行状态,设定频率和运行频率、电流、电压等,内容包括程序和通讯说明YID:8812601412712742......
  • Django如何把SQLite数据库转换为Mysql数据库
    大部分新手刚学Django开发的时候默认用的都是SQLite数据库,上线部署的时候,大多用的却是Mysql。那么我们应该如何把数据库从SQLite迁移转换成Mysql呢?之前我们默认使用的是SQLite数据库,我们开发完成之后,里面有许多数据。如果我们想转换成Mysql数据库,那我们先得把旧数据从SQLite导出......
  • 把流中的字符串转换为 UTF 格式
    unitUnit1;interfaceuses Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms, Dialogs,StdCtrls;type TForm1=class(TForm)  Button1:TButton;  Memo1:TMemo;  procedureButton1Click(Sender:TObject);  pr......
  • com-alibaba-fastjson转换json时默认将属性第一个字母转小写
    问题描述将实体类对象转为json字符串的时候,会将属性名首字母改为小写例如此出User队形有两个属性,USER_NAME和USER_AGE,首字母均为大写将实体类对象转为JSON后首字母全都转换为了小写解决方法这是因为阿里巴巴的fastjson框架默认使用了JavaBean规范中的命名约定,将属性名首字......
  • 5.12 强制转换函数重载
    在 C++ 中,类型的名字(包括类的名字)本身也是一种运算符,即类型强制转换运算符。类型强制转换运算符是单目运算符,也可以被重载,但只能重载为成员函数,不能重载为全局函数。经过适当重载后,(类型名)对象这个对对象进行强制类型转换的表达式就等价于对象.operator类型名(),即变成对运算符......
  • Windows——Windows11右键经典栏与传统栏转换
    图1.Windows11右键默认为经典菜单栏图2.传统右键菜单栏/显示更多选项由经典右键菜单栏变为传统右键菜单栏【图1变图2】运行reg.exeadd"HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32"/f/ve将【显示更多选项】作为默......
  • rodert教你学FFmpeg实战这一篇就够了
    rodert教你学FFmpeg实战这一篇就够了建议收藏,以备查阅pdf阅读版:链接:pan.baidu.com/s/11kIaq5V6…提取码:java[toc]前言todo有人问rodert哥这篇文章干货有多干,问就是,硌牙。ffmpeg有多强大,我想你都知道了,现在很多市场上的剪辑软件都是基于它做的,只是加了一些包装。读完本篇,你会发现......