暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

处理日期与时间

与C同行 2022-02-16
222
处理数据的时候,在一些情况下我们会遇到日期或者时间这个字段,比如使用pandas、数据库等。如果这个时候需要使用日期或者时间,我们该怎么办呢?这里有两个思路,第一,在对应的库中有没有相应支持的日期或者时间对象,一般情况下,对应的库中是有支持的日期或者时间对象,所以我们可以阅读相关文档然后使用;第二,对应的库中没有提供,也许有些人这个时候就不知道怎么处理了,其实这个时候更简单,因为它们一定是直接支持了python原生的日期时间对象。对于大部分的数据处理来说,它们都是直接支持python原生的日期时间对象,因此,我们来了解一下原生日期时间对象的使用。
我们先来想象一下,我们会怎么处理日期与时间,应该很简单,需要构造一个日期时间,它包含年月日小时分钟秒甚至更多的信息,这个日期时间可以用来加减时间,它可以转换成字符串(可读性),可以从字符串构造(互相转换),可以获得年、月、日、小时等等信息,可以转换时区,等等。
对于日期时间,应该就是这么多的操作,接下来我们了解一下datetime模块,该模块提供了time,timedelta,date,datetime等对象,看名字也明白了它们的作用,就是我们日常生活中对日期和时间概念的具化。
日期时间使用起来也是很简单,我们看一下下面的例子就能掌握了,实例如下:
"""日期时间处理

格式:
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身
"""

import datetime

# 年月日构造日期
date1 = datetime.date(year=2022, month=6, day=1)
print(f'date1:{date1}')
# 从1970-1-1开始计算秒数
date2 = datetime.date.fromtimestamp(60*60*16)
print(f'date2:{date2}')
# 从iso格式构造date
date3 = datetime.date.fromisoformat('1970-02-02')
print(f'date3:{date3}')

# 时间
time1 = datetime.time(hour=1, minute=1, second=1, microsecond=1)
print(f'time1:{time1}')
print(f'time1.hour:{time1.hour}')

# 日期时间
datetime1 = datetime.datetime(2022, month=6, day=1, hour=12, minute=30, second=1)
print(f'datetime1:{datetime1}')
print(f'datetime1.strformat={datetime1.strftime("%y--%b--%d")}')

# 时间差
datetime2 = datetime.datetime(2022, 1, 1)
print(f'datetime2:{datetime2}')
timedelta1 = datetime.timedelta(days=1)
print(f'datetime2 + 1day={datetime2+timedelta1}')
print(f'datetime1 - datetime2={datetime1-datetime2}')

from datetime import datetime, timedelta, timezone
# 时区
utc_dt = datetime.utcnow().replace(tzinfo=timezone.utc)
print(f'utc_dt={utc_dt}')
cn_dt = utc_dt.astimezone(timezone(timedelta(hours=8)))
print(f'cn_dt={cn_dt}')
jan_dt = utc_dt.astimezone(timezone(timedelta(hours=9)))
print(f'jan_dt={jan_dt}')
cn_2_jan_dt = cn_dt.astimezone(timezone(timedelta(hours=9)))
print(f'cn_2_jan_dt={cn_2_jan_dt}')

结果如下:

文章转载自与C同行,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论