datetime模块,在python中使用日期和时间

时间的划分

由于时间在全世界范围内的不同,会受到时区,政治因素和夏令时的影响。比如说,我认为现在是2021年的11月6日,但是,在世界的其他地方,今天可能是5日或者是7日,没有办法准确的确定现时此刻到底是什么时间。

因此,我们将时间划分为简单时间和准确时间。简单时间仅仅是一个时间,只针对你所在的地区有效,并不关心该时间在全世界中是什么时间。而准确时间必须要做更详细的记录,以此来确定,现在的时间,在全世界各个地方,到底是什么时间。

所以,不难看出,准确时间是非常有价值,但是它难以理解。而简单时间更容易被理解和使用。因此本文将重点讲述如何使用简单时间,而不考虑使用准确时间。

datetime总体认识

除去用于记录准确时间的timezone部分不谈,我们能够用上的datetime中的内容,大致分为了这样几个部分。

datetime.date

一个简单的日期,假设我们现在使用的日历在万年以内有效,包含year, month, day等属性

datetime.time

一个理想化的时间,假设每一天都有86400秒,包含hour, minute, second, microsecond等属性

datetime.datetime

一个简单的日期和时间,既记录了今天是哪一天,又记录了现在是什么时间

datetime.timedelta

用于表示两个时间对象之间的时间间隔,用作计算

注意:时间的转换规则如下所示

year 年,1年中有12个月

month 月,1月中可能有28,29,30或者31日,具体要看情况而定。

特别的:一般如果冲腾讯会员,腾讯会直接把1个月理解为31天,在提供包月服务的时候,你也可以参考腾讯的做法。

hour 小时,1天中有24个小时

minute 分钟,1小时中有60分钟

second 秒,1分钟中有60秒

millisecond 毫秒,1秒中有1000毫秒

microsecond 微秒,1秒中有1百万微秒,1毫秒中有1000微秒

datetime.date

date的使用方式非常简单,初始化的时候,只要按照顺序传入year, month, day即可。

import datetime
 
d = datetime.date(2021, 11, 6)
 
print(d) # 结果为:2021-11-06
print(d.year) # 结果为:2021
print(d.month) # 结果为:11
print(d.day) # 结果为:6

常用的方法

date.weekday() 返回一个整数代表今天是星期几,0代表星期一,6代表星期日

date.isoweekday() 返回一个整数代表今天是星期几,但是此时1代表星期一,7代表星期日

date.strftime() 格式化字符串

注意,weekday()和isoweekday()的功能是一样的,是按照不同的习惯方式,进行了表示。

import datetime
 
d = datetime.date(2021, 11, 6)
 
print(d.weekday()) # 结果为:5,但是是星期六的意思
print(d.isoweekday()) # 结果为:6,表示星期六的意思

date可以使用strftime(),具体方法请看下边的日期格式化字符串,不过注意的是,如果在date中调用了时间,默认会显示0时0分0秒

datetime.time

初始化时,需要依次传入hour, minute, second, microsecond,其中hour是必须的

时间可以进行比较大小,但是不同类型的时间不可以比较(这里指的是简单时间不能与准确时间进行比较大小)

import datetime
 
d1 = datetime.time(23, 11, 22)
d2 = datetime.time(11, 21, 32)
print(d1 < d2) # 结果为False

time可以使用strftime(),具体方法请看下边的日期格式化字符串,不过注意的是,如果在time中调用了日期,默认会显示1900年1月1日

datetime.datetime

初始化需要传入year, month, day, hour, minute, second, microsecond,其中year, month, day是必须的

除此以外,还可以通过几种常用方法创建datetime对象

datetime.today() 通过现在的时间创建datetime对象

datetime.fromtimestamp(timestamp) 通过时间戳创建datetime对象

datetime.combine(date, time) 通过合并date和time对象,得到datetime对象

datetime.strptime(data_str, format) 通过时间字符串,得到datetime对象

使用方法如下

import datetime
import time
 
d1 = datetime.datetime.today() # 直接通过现在的时间,创建datetime对象
d2 = datetime.datetime.fromtimestamp(time.time()) # 通过时间戳,创建datetime对象
 
t1 = datetime.date(2021, 11, 6)
t2 = datetime.time(21, 33, 2)
d3 = datetime.datetime.combine(t1, t2) # 通过合并date对象和time对象,创建datetime对象
 
d4 = datetime.datetime.strptime("2021-11-06", "%Y-%m-%d") # 通过反向拆分时间字符串,创建datetime对象
 
print("d1:", d1)
print("d2:", d2)
print("d3:", d3)
print("d4:", d4)

datetime可以使用strftime(),具体方法请看下边的日期格式化字符串

datetime.timedelta

timedelta可以用来方便的进行时间的计算,参数全都是可选的,因此建议以关键字参数的形式传入,会比较清晰,默认全都是0,总共有这些参数,days, seconds, micorseconds, milliseconds, minutes, hours, weeks,参数可以是浮点数,整数,正数,负数

timedelta中,还有一些方法,可以帮助你快速的计算这段时间相当于多少秒,然后你可以通过秒,去换算成你想要的时间

timedelta.total_seconds()

比如,计算几天以后,可以选择这样做

import datetime
 
 
d = datetime.datetime.today() # 将时间初始化为现在的时间
dt = datetime.timedelta(days=10) # 初始化一段时间,为10天
 
d += dt # 计算10天后,是什么时候
print(d)

日期格式化字符串

常用的格式化方式

%a 缩写的星期几的表示方式,如Sun, Mon

%A 完整的星期几的表示方式,如Sunday, Monday

%b 月份的缩写,如Jan, Feb

%B 月份的全写,如January, February

%w 用整数表示星期几,0代表星期日,6代表星期六

%d 补零的十进制数表示日子,比如01, 02

%m 补零的十进制数表示月份,比如01, 02

%y 补零的十进制数表示年份,比如21, 22

%Y 世纪年份,比如2021, 2022

%H 24小时制的小时

%I 12小时制的小时,无法确定上下午

%p 上午或者下午,比如AM, PM

%M 补零后十进制表示分钟,比如01, 02

%S 补零后十进制表示秒数,比如01, 02

%f 补零后十进制表示微秒,比如000000, 000001

%j 补零后十进制的一年中的第几天,比如001, 002

%U 补零后十进制的一年中的第几周,第一个星期日以前算第0周

%W 补零后十进制的一年中的第几周,第一个星期一以前算第0周

%c 本地化的日期与时间

%x 本地化的日期

%X 本地化的时间

根据这些格式化方式,瞎老弟我自己组建了一些表示方式,仅供参考

1,2021-11-06

"%Y-%m-%d"

2,21/11/06

"%y/%m/%d"

3,2021-11-06 21:11:06

"%Y-%m-%d %H:%M:%S"

4,2021年11月06日

"%Y年%m月%d日"

5,2021/11/06 9:11:06 PM

"%Y/%m/%d %I:%M:%S %p"

6,2021.11.06

"%Y.%m.%d"

7,21:11:06

"%H:%M:%S"

8,Saturday, November 06

"%A, %B %d"

9,今天是11月06日,2021年的第44周,第310天

"今天是%m月%d日,%Y年的第%W周,第%j天"

使用方式,将写好的格式化字符串直接复制到strftime()里面即可

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

推荐阅读更多精彩内容