19.1_datetime时间模块介绍

一、背景

Python 有很多种方式处理日期和时间,常见的时间处理的模块是datetime、time、calendar,以下主要讲解datetime模块

  • datetime:(日期时间)模块主要是用来表示日期的,就是我们常说的年月日时分秒
  • time:(时间)模块主要侧重点在时分秒
  • calendar:(日历)模块主要是用来表示年月日,是星期几之类的信息

二、介绍

datetime模块是这三个时间模块中使用的相对较为频繁,datetime有六个类,比较常用的有datetime、date、time、timedelta这四个

  • datetime:日期时间(datetime.datetime数据类型)
    • datetime.datetime数据类型的数据可以获取year、month、weekday、isoweekday、day、hour、minute、second、mircosecond
      注意:
      1.weekday:返回目标日期的工作日,0代表星期一,6代表星期日
      2.isoweekday:返回目标日期的工作日,1代表星期一,7代表星期日,它和weekday的区别仅仅在于起始序数的不同
      3.datetime.datetime数据类型的数据可以比较(使用>、<、=符号),也可以做运算(两个datetime.datetime数据类型的数据进行加减、与timedelta搭配使用加减)
  • date:日期(datetime.date数据类型)
  • time:时间(datetime.time数据类型)
  • timedelta:时间间隔(datetime.timedelta数据类型)

1.datetime/date/time实例

from datetime import datetime
from datetime import date
from datetime import time

now = datetime(2020, 1, 1, 19, 30, 0, 520)
now_2 = date(2020, 1, 1)
now_3 = time(19, 30, 0, 520)
print(type(now), now)
print(type(now_2), now_2)
print(type(now_3), now_3)

输出结果如下:

<class 'datetime.datetime'> 2020-01-01 19:30:00.000520
<class 'datetime.date'> 2020-01-01
<class 'datetime.time'> 19:30:00.000520

2.datetime数据类型的时间实例

date = datetime(2022, 9, 20, 18, 30, 0)
print("year:{}".format(date.year))
print("month:{}".format(date.month))
print("weekday:{}".format(date.weekday()))
print("isoweekday:{}".format(date.isoweekday()))
print("day:{}".format(date.day))
print("hour:{}".format(date.hour))
print("minute:{}".format(date.minute))
print("second:{}".format(date.second))
print("microsecond:{}".format(date.microsecond))

输出结果如下:

year:2022
month:9
weekday:1
isoweekday:2
day:20
hour:18
minute:30
second:0
microsecond:0

3.datetime数据类型比较

print("------大于比较------")
print(datetime(2022, 9, 5) > datetime(2022, 9, 4))
print(datetime(2022, 9, 5) > datetime(2022, 9, 6))
print("------小于比较------")
print(datetime(2022, 9, 3) < datetime(2022, 9, 4))
print(datetime(2022, 9, 5) < datetime(2022, 9, 4))
print("------相等比较------")
print(datetime(2022, 9, 5) == datetime(2022, 9, 4))
print(datetime(2022, 9, 4) == datetime(2022, 9, 4))

输出结果如下:

------大于比较------
True
False
------小于比较------
True
False
------相等比较------
False
True

4.datetime拼接

date和time可以从datetime中分离出来,也可以通过combine方法合并成新的datetime

from datetime import datetime

now = datetime(2020, 1, 1, 19, 30, 0, 520)
print(now)
print(datetime.combine(now.date(), now.time()))  # 合并日期和时间

输出结果如下:

2020-01-01 19:30:00.000520
2020-01-01 19:30:00.000520

三、使用

1.获取指定时间

  • datetime(2020, 1, 1, 19, 30, 0, 520)

2.获取当前时间

  • datetime.now()
  • datetime.today()
    datetime.datetime数据类型的数据转换成字符串类型使用isoformat方法
dt = datetime.now()
print(type(dt.isoformat()), dt.isoformat())  # 默认以字符“T”分隔日期和时间
print(type(dt.isoformat(sep=" ")), dt.isoformat(sep=" "))  # 以空格“ ”分隔日期和时间

输出结果如下:

<class 'str'> 2022-09-27T15:30:30.551975
<class 'str'> 2022-09-27 15:30:30.551975

3.其他方式获取时间

  • datetime.fromtimestamp(timestamp):以时间戳为参数
    注意:使用fromtimestamp方法转换的日期是基于当前时区即东八区,如果是基于零时区,使用utcfromtimestamp方法
t = datetime.now().timestamp()
print(datetime.fromtimestamp(t))  # 本地时间
print(datetime.utcfromtimestamp(t))  # UTC时间

输出结果如下:

2022-09-25 23:11:26.053696
2022-09-25 15:11:26.053696
  • datetime.fromordinal(ordinal):以ISO日历公历序数为参数
  • datetime.fromisoformat(date_string):以字符串格式时间为参数
    注意:datetime.fromisoformat是python3.7版本才支持

4.获取年份、周数

转换成datetime.datetime数据类型,使用isocalendar方法

dt = datetime.now()
print(dt.isocalendar())

输出结果如下,依次为年份、第几周、周几:

(2022, 39, 2)

5.获取时间戳

转换成datetime.datetime数据类型,使用timestamp方法

dt = datetime(2020, 1, 1, 19, 30, 0, 520)
dt_2 = datetime.now()
print(dt.timestamp())
print(dt_2.timestamp())
print(int(dt_2.timestamp()))

输出结果如下:

1577878200.00052
1664259734.803194
1664259734

6.替换时间

转换成datetime.datetime数据类型,使用replace方法

dt = datetime.now()
dt_2 = dt.replace(year=2020, day=15, hour=12)
print(dt)
print(dt_2)

输出结果如下:

2022-09-27 14:12:21.813312
2020-09-15 12:12:21.813312

四、转换

1.datetime.datetime转字符串

使用strftime方法,strftime即string format time,用来将时间格式化成字符串

1.1 创建datetime.datetime数据,再使用strftime方法

dt = datetime.now()
print(type(dt), dt)
print(type(dt.strftime("%Y-%m-%d")), dt.strftime("%Y-%m-%d"))  # 常用日期一
print(type(dt.strftime("%Y%m%d%H%M%S:%f")), dt.strftime("%Y%m%d%H%M%S:%f"))  # 常用日期二

输出结果如下:

<class 'datetime.datetime'> 2022-09-29 12:41:27.959123
<class 'str'> 2022-09-29
<class 'str'> 20220929124127:959123

1.2 直接使用strftime方法

dt = datetime.strftime(datetime.now(), "%Y-%m-%d %H:%M:%S")
print(type(dt), dt)

输出结果如下:

<class 'str'> 2022-09-30 16:12:53

2.字符串转datetime.datetime

使用strptime方法,strptime即string parse time,用来将字符串解析成时间

dt = datetime.strptime("2020-01-01 12:00:00", "%Y-%m-%d %H:%M:%S")
print(type(dt), dt)

输出结果如下:

<class 'datetime.datetime'> 2020-01-01 12:00:00

字符串'%Y-%m-%d %H:%M:%S'规定了日期和时间部分的格式。详细的说明请参考Python文档

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容