详解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中同样也这样使用
- %Y:四位年份
- %m:两位月份(01-12)
- %d:两位日期(01-31)
- %H:两位小时(00-23)
- %M:两位分钟(00-59)
- %S:两位秒(00-59)
时间戳
获取当前时间戳
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时间的资料请关注脚本之家其它相关文章!