python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > python时间

详解python如何正确使用时间戳,日期,时间,时区

作者:仙草哥哥

这篇文章主要为大家介绍了如何在python中正确使用时间戳,日期,时间,时区,文中通过简单的示例进行了详细介绍,希望对大家有一定的帮助

时间概念

utc与时区

UTC是Coordinated Universal Time的缩写,是全球时间的标准,UTC时间不受时区和夏令时的影响,是时间的标准。全球各地的时间以UTC时间为参考进行调整。

时区是Time Zone,是地球上按照经度划分的区域,每个区域有自己的标准时间,时区与UTC时间的差距通常以小时为单位(但有些时区偏移的时间有30分钟)。整个地球被划分为24个主要时区,每个时区大约覆盖15度经度(360度/24小时)

北京时间是东八区,东八区也就是比UTC时间偏移了8小时,也就是UTC+8,在世界上,同样在东八区的,还有澳大利亚的地区。

纽约时间是西五区,也就是UTC-5,因此,距离北京时间的东八区标准时间差是13小时。但是需要注意的是,当纽约地区开始夏令时的时候,会变成UTC-4,此时就是常见的12小时时差了。

东京时间是东九区,也就是UTC+9,因此,距离北京时间的东八区差是1小时,且是早1小时。

夏令时

夏令时是一种人为调整时钟的制度,通常在春季将时钟向前调一个小时,其目的是延长晚间的日照时间,旨在更有效地利用日光资源,减少能源消耗。

其中,北半球的高纬度国家通常使用夏令时,因为其纬度高,日照变化大。与之相反,接近赤道的地区,日照变化不大,因此通常不用夏令时。例如大部分亚洲国家,如中国,日本,韩国,都不使用夏令时。

没有使用过夏令时地区的人,通常对于夏令时的作用不太了解,具体来说:夏令时期间,时钟被拨快一小时。这意味着人们按照新的时间表作息,早上实际比平时早起一小时,但由于夏季天亮较早,对生活影响不大。下午下班时,按照新的时间,天色仍然明亮,人们可以在下班后享受更多的日照时间。

时间戳

时间戳是Timestamp是一种表示特定时间点的数字格式,基于UTC时间的1970年1月1日00:00:00以来经过的秒数或毫秒数来表示,时间戳可以精确地标识一个具体的时间点,该时间点不受时区影响。

时间戳在编程中有很大作用,例如,记录某个系统事件,用户注册的时间,或者通过计算时间戳的差,来计算时间间隔。

time

通用格式化

time主要处理时间的获取和简单的格式化,如果需要更复杂的日期和时间操作,应该尝试使用datetime

常用的格式化字符串方式如下所示,并且datetime中同样也这样使用

时间戳

获取当前时间戳

import time
 
timestamp = time.time()
print("当前时间戳:", timestamp)

时间戳可以用于记录时间间隔,不过,如果要更精准的计时可以用

import time
 
start = time.perf_counter()
time.sleep(2)
end = time.perf_counter()
print(f"操作耗时: {end - start} 秒")

时间戳转为时间对象

时间戳转换为struct_time本地时间

timestamp = time.time()
local_time = time.localtime(timestamp)
print("本地时间:", local_time)

将时间戳转换为utc时间

timestamp = time.time()
utc_time = time.gmtime(timestamp)
print("UTC时间:", utc_time)

时间对象转为时间戳

import time
 
struct = time.strptime("2024-11-02 22:00:00", "%Y-%m-%d %H:%M:%S")
timestamp = time.mktime(struct)
print("时间戳:", timestamp)  # 时间戳: 1730556000.0

时间格式化

将一个时间戳快速转为可读时间

timestamp = time.time()
readable_time = time.ctime(timestamp)
print(readable_time)  # 格式如Sat Nov  2 10:32:27 2024

根据时间字符串,创建时间对象

time_str = "2024-11-02 22:00:00"
parsed_time = time.strptime(time_str, "%Y-%m-%d %H:%M:%S")
 
print(parsed_time)

根据时间对象,转为字符串

time_str = "2024-11-02 22:00:00"
parsed_time = time.strptime(time_str, "%Y-%m-%d %H:%M:%S")
 
formatted_time = time.strftime("%Y年%m月%d日%H点%M分", parsed_time)
print("格式化时间:", formatted_time)  # 格式化时间:2024年11月02日22点00分

时间暂停

时间是不会暂停的,实际上该功能是程序暂停

import time
 
print("暂停前")
time.sleep(3)  # 暂停3秒
print("暂停后")

datetime

date日期

获取当前日期

today = datetime.date.today()
print("今天的日期:", today)  # 格式如2024-11-02

datetime日期时间

获取当前时间

now_time = datetime.datetime.now().time()
print("当前时间:", now_time)  # 格式如10:46:50.506231

获取当前日期与时间

now = datetime.datetime.now()
print("当前日期和时间:", now)  # 格式如2024-11-02 10:47:44.299445

获取UTC时间

utc_now = datetime.datetime.utcnow()
print("UTC时间:", utc_now)

创建日期时间对象

创建日期对象

specific_date = datetime.date(2024, 11, 2)
print("特定日期:", specific_date)

创建时间对象

specific_time = datetime.time(22, 0, 0)
print("特定时间:", specific_time)

创建日期时间对象

specific_datetime = datetime.datetime(2024, 11, 2, 22, 0, 0)
print("特定日期和时间:", specific_datetime)

时间字符串格式化与解析

时间字符串格式化

now = datetime.datetime.now()
formatted = now.strftime("%Y-%m-%d %H:%M:%S")
print("格式化日期时间:", formatted)

时间字符串解析

time_str = "2024-11-2 22:00:00"
parsed_datetime = datetime.datetime.strptime(time_str, "%Y-%m-%d %H:%M:%S")
print("解析后的日期时间对象:", parsed_datetime)

时间间隔

使用timedelta计算时间间隔的日期

from datetime import date, timedelta
 
today = date.today()
future_date = today + timedelta(days=10)
print("10天后的日期:", future_date)
 
past_date = today - timedelta(weeks=1)
print("一周前的日期:", past_date)

计算时间间隔的日期时间

from datetime import datetime, timedelta
 
now = datetime.now()
 
future_time = now + timedelta(minutes=10)
print("10分钟后的日期时间:", future_time)
 
past_time = now - timedelta(hours=2)
print("2小时前的日期时间:", past_time)

zoneinfo

时间转换

在python 3.9以后,引入了zoneinfo用于处理时区,并且能够直接用于datetime

from datetime import datetime
from zoneinfo import ZoneInfo
 
now_utc = datetime.now(ZoneInfo("UTC"))
print("UTC时间:", now_utc)
 
# 转换为北京时间
now_beijing = now_utc.astimezone(ZoneInfo("Asia/Shanghai"))
print("北京时间:", now_beijing)
 
# 转换为纽约时间
now_newyork = now_utc.astimezone(ZoneInfo("America/New_York"))
print("纽约时间:", now_newyork)

实际上,时间转换也可以自行进行计算,例如,我们已经了解了北京时间是UTC+8,纽约时间是UTC-5

from datetime import datetime, timedelta
 
now_utc = datetime.utcnow()
print("UTC时间:", now_utc)
 
now_beijing = now_utc + timedelta(hours=8)
print("北京时间:", now_beijing)
 
now_newyork = now_utc - timedelta(hours=5)
print("纽约时间:", now_newyork)

列出所有时区

所有时区

import zoneinfo
 
print(zoneinfo.available_timezones())

遍历找到其中的Asia时区

import zoneinfo
 
for zone in zoneinfo.available_timezones():
    if "Asia" in zone:
        print(zone)

获取时区时间

如果在使用当前时间的时候,总是自行设置本地时区的时间,而不依赖于机器设置,可以获得更好的跨平台性

from datetime import datetime
from zoneinfo import ZoneInfo
 
tz_shanghai = ZoneInfo("Asia/Shanghai")
tz_newyork = ZoneInfo("America/New_York")
 
now_shanghai = datetime.now(tz_shanghai)
now_newyork = datetime.now(tz_newyork)
 
print("北京时间:", now_shanghai)
print("纽约时间:", now_newyork)

以上就是详解python如何正确使用时间戳,日期,时间,时区的详细内容,更多关于python时间的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文