Python CheatSheet-日期、时间控制与datetime模块使用

本文详细介绍了Python中datetime模块的使用方法,包括datetime、date、time和timedelta类的特性,以及如何进行日期时间的创建、转换、加减运算和格式化。特别强调了timedelta的正确使用和常见陷阱。

本文根据Python2的官方文档展开,链接在此

1. datetime模块介绍:

有下面几种类:

datetime.date

就是存的公历日期,有三个属性,year,month,day

datetime.time

存的是时间,属性有hour, minute, second, microsecond, and tzinfo。没有年月日

datetime.datetime

存的是日期和时间,属性有year, month, day, hour, minute, second, microsecond, and tzinfo.

datetime.timedelta

存的是日期或时间差,精度是microsecond。正值对应更晚的时间或日期。比如

import datetime
oneDay = datetime.timedelta(days = 1)

!!!注意!!!

timedelta的最大单位是days,所以不要指望能够加一个月甚至一年!

datetime.tzinfo

是跟time zone相关,在不同时区转换中有用。

2. 日期操作

对于date objects,有三种方式,链接在这里。这里就讲讲我自己常用的:

建立date对象:

可以从date.today()建立当前日期的date对象

也可以直接用date命令直接建立。比如

也可以用datetime.strptime()先建立datetime对象,再用.date()命令将datetime转换成date。比如

import datetime
today1 = datetime.date.today()
today2 = datetime.date(2019, 4, 20)
today3 = datetime.datetime.strptime('2019-04-20', '%Y-%m-%d')
today4 = today3.date()

date的变换/操作

对已有的date,加减timedelta获得新的日期。

也可用replace命令,将年、月、日中的一个或多个替换成指定值。

两个date之间的减法将得到timedelta,对应日期差。

返回成字符串:

date对象可以用.isoformat()命令直接返回'2019-02-28'这样的string

date对象在如果用print(),或者%s的格式化字符串打出的就是'2019-02-28'这样的string。

也可用date.strftime(format)命令,返回其他指定格式的日期字符串。

3. datetime和date之间转换:

datetime转date只需要用.date()命令,date转datetime需要补上后面的时间,所以代码中有一个datetime.datetime.min.time()。如下:

import datetime
# convert date to datetime
todayDate = datetime.date.today()
todayDatetime = datetime.datetime.combine(todayDate, datetime.datetime.min.time())

# convert datetime to date
nowDatetime = datetime.datetime.now()
nowDate = nowDatetime.date()

4. 截取当前时间,计算时间差 

这个的典型应用就是记录程序、模块、代码的运行起止时间和耗时,可以用datetime记录当前时刻,然后用两个datetime相减,获得日期和时间差,前面说过了两个datetime相减的日期和时间差将以timedelta来保存。

datetime.datetime.timedelta有三个属性:

days:时间差是多少天

seconds:时间差是多少秒

microseconds:时间差是多少微秒

5. 小总结:

# import datetime
# 1. 显示当前时间
now_datetime = datetime.datetime.now()
print(now_datetime)
2019-04-27 21:45:11.753420
type(now_datetime)
<type 'datetime.datetime'>

# 2. strftime和strptime
# strptime是将字符串转换成datetime的date或datetime或time类型
# strftime是将datetime的date或datetime或time类型转换成字符串
# 比如
date1 = datetime.date(2019, 4, 27)
date_str2 = datetime.datetime.strftime(date1, '%Y-%m-%d')
datetime3 = datetime.datetime.strptime(date_str2, '%Y-%m-%d')
date4 = datetime.datetime.strptime(date_str2,'%Y-%m-%d').date()

PS:

1. 注意几个坑:

timedelta的最大单位是days,所以不能用它直接加一个月或一年。

replace的时候,小心变量不要超出范围,比如月份大于12或小于1之类的。

2. strftime()和strptime()用到的format:

可以参考这个链接。典型的比如:

%y,年份后两位,%Y年份四位

%m,月份两位数字

%d,日期两位数字

%H,小时两位数字

%M,分钟两位数字

%S,秒两位数字

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值