首页 > 编程语言 >python的datetime使用时区转换的注意事项

python的datetime使用时区转换的注意事项

时间:2024-06-06 19:44:12浏览次数:27  
标签:utc UTC python 夏令时 datetime pytz 时间 注意事项

由于做美股的开始,经常用到需要将utc时间转换成美东时间,或者美东时间转换为utc时间。

美东时间涉及到一个夏令时,一个冬令时,不同的阶段与utc时间的时区相差不同的时间段

 

以前我一直用pytz的三方模块给datetime赋值时区信息,然后生成的对象用astimezone的方法,转换到对应的时区信息的时间

这里有一个比较隐晦的问题,我也刚碰到

from_entered_datetime = datetime.datetime(year=2024, month=6, day=5,
                                                  hour=14, minute=55, second=0,
                                                  tzinfo=pytz.timezone('US/Eastern'))

像上面这样,假如我新建了一个这样的时间对象,当这个时间对象用astimezone的方法

比如

from_entered_datetime.astimezone(tz=pytz.utc)

这里就会出现一个问题,无论你的创建的时间在美东的夏令时,还是冬令时,转换的时区的时间差都是一样的,也就是不区分冬令时或者夏令时,可以理解为是一个写入时区具体信息的时间,比如西5区

当如果你创建了一个固定时区的datetime.datetime的时间对象,通过astimezone(tz=pytz.timezone('US/Eastern'))这样的转换,是会根据时间来判断冬令时以及夏令时的。

        # 使用pytz的localize方法,将naive datetime对象转换为带有正确时区信息的datetime对象
        eastern = pytz.timezone('US/Eastern')
        from_entered_datetime = eastern.localize(from_entered_datetime_naive)

你可以通过上面的方式来创建一个datetime对象,他应该会根据from_entered_datetime_naive的时间来给这个对象赋值具体夏令时,还是冬令时的时区信息
这可以解决上面的问题

现在好友更好的方案,就是在python3.9以上有的zoneinfo模块

from datetime import datetime
from zoneinfo import ZoneInfo

# 创建一个当前UTC时间的datetime对象
utc_time = datetime.now(ZoneInfo("UTC"))

# 打印UTC时间
print("UTC Time:", utc_time)

# 您也可以创建一个指定时间的UTC datetime对象
specific_utc_time = datetime(2024, 6, 5, 14, 55, 0, tzinfo=ZoneInfo("UTC"))

# 打印指定的UTC时间
print("Specific UTC Time:", specific_utc_time)


通过zoneInfo创建的时间对象,在使用astimezone的时候,都不会出现问题,而且这个是Python的内置模块,挺好用的



标签:utc,UTC,python,夏令时,datetime,pytz,时间,注意事项
From: https://www.cnblogs.com/sidianok/p/18235907

相关文章

  • python --数据分析-numpy-pandas-series对象和dataframe对象
    Python作为当下最为流行的编程语言之一,可以独立完成数据分析的各种任务功能强大,在数据分析领域里有海量开源库,并持续更新是当下热点——机器学习/深度学习领域最热门的编程语言除数据分析领域外,在爬虫,Web开发等领域均有应用常用Python数据分析开源库介绍NumPyNumP......
  • 探索 CSV 模块:Python 中 CSV 数据持久化的最佳实践
    ......
  • Python-datetime
    importdatetimeprint("獲取當前時間和日期:",datetime.datetime.now())UtcNow=datetime.datetime.utcnow()print("獲取當前時間和日期的世界標準時間:",UtcNow)print("獲取日期:",UtcNow.date())print("獲取年:",UtcNow.year)print("獲取月:",Ut......
  • Python-GEE遥感云大数据分析、管理与可视化及多领域案例教程
    原文链接:Python-GEE遥感云大数据分析、管理与可视化及多领域案例教程https://mp.weixin.qq.com/s?__biz=MzUzNTczMDMxMg==&mid=2247606139&idx=3&sn=2b98c8d5c99878ce78c8fade559bdae5&chksm=fa821e9ccdf5978a7e63a1d514f2a643158a595fa75ac751c5ca477692bbc84e993245b342df&to......
  • 【Python Cookbook】S01E22 替换文本 re.sub(),re.subn() 以及 回调函数
    目录问题解决方案讨论问题如果我们想要对字符串中的文本做替换,该如何办?解决方案针对简单的文本模式,我们直接使用字符串内置方法str.replace()函数即可。text="Ileaveamessageforyou."print(text.replace('leave','left'))结果:Ileftamessagefor......
  • 【python】 文件操作
    【2024/6/6】文件刪除保持【解決】一般删除文件时使用os库,然后利用os.remove(path)即可完成删除,如果删除空文件夹则可使用os.removedirs(path)即可,但是如果需要删除整个文件夹,且文件夹非空时使用os.removedirs(path)就会报错了,此时可以使用shutil库,该库为python内置库,是一个对......
  • python 基础习题5 --- 海龟画图系列
    1.  画出一个半径为100的圆,背景色和画笔颜色自己定义,如下图:importturtleastt.speed(10)t.bgcolor("black")t.pencolor("red")t.pensize(2)radius=100t.penup()t.goto(0,-100)t.down()t.circle(radius)t.penup()t.done()答案 2. 用循环画出五个同......
  • 00-macOS和Linux安装和管理多个Python版本
    在Mac上安装多个Python版本可通过几种不同方法实现。1Homebrew1.1安装Homebrew若安装过,跳过该步。/bin/bash-c"$(curl-fsSLhttps://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"1.2安装Python如安装Python3.7:[email protected]......
  • python SQLite3 库
    sqlite3是一个python中内置数据库,执行时会在本地文件夹中创建一个数据库   importsqlite3#连接到数据库,如果数据库不存在,则会被创建conn=sqlite3.connect('example.db')#创建一个cursor对象cursor=conn.cursor()#创建表格的SQL命令create_table_query......
  • 【Python机器学习】无监督学习——不同类型的预处理
    之前学习过,一些算法(比如神经网络和SVM)对数据缩放非常敏感。因此,通常的做法是对特征进行调节,使数据更适合于这些算法。通常来说,这是对数据的一种简单的按照特征的缩放和移动。举例:importmglearn.plotsimportmatplotlib.pyplotaspltmglearn.plots.plot_scaling()plt.sh......