您的位置:首页 > 编程语言 > Python开发

Python时间日期操作大全

2016-07-31 12:31 549 查看
Python时间和日期操作需要用到datetime和time标准库模块。

一、time模块

1.time模块表示时间的方式

①时间戳

②格式化的时间字符串

③以数组的形式表示,即(struct_time),共有九个元素

year (four digits, e.g. 1998)

month (1-12)

day (1-31)

hours (0-23)

minutes (0-59)

seconds (0-59)

weekday (0-6, Monday is 0)

Julian day (day in the year, 1-366)

DST (Daylight Savings Time) flag (-1, 0 or 1) 是否是夏令时

2.常用函数

①asctime([tuple]) -> string

将一个struct_time(默认为当时时间),转换成字符串。

>>> time.asctime()
'Sun Jul 31 11:10:39 2016'
>>> import time
>>> thisTime = "2016-07-31 12:12:12"
>>> timeTuple = time.strptime(thisTime, "%Y-%m-%d %H:%M:%S")
>>> time.asctime(timeTuple)
'Sun Jul 31 12:12:12 2016'


②ctime(seconds) -> string

将一个时间戳(默认为当前时间)转换成一个时间字符串。

>>> time.ctime()
'Sun Jul 31 11:11:33 2016'
>>> time.ctime(1469938332)
'Sun Jul 31 12:12:12 2016'


③ gmtime([seconds]) -> (tm_year, tm_mon, tm_day, tm_hour, tm_min,tm_sec, tm_wday, tm_yday, tm_isdst)

将一个时间戳转换成一个UTC时区(0时区)的struct_time,如果seconds参数未输入,则以当前时间为转换标准。

>>> time.gmtime()
time.struct_time(tm_year=2016, tm_mon=7, tm_mday=31, tm_hour=3, tm_min=15, tm_sec=35, tm_wday=6, tm_yday=213, tm_isdst=0)
>>> time.gmtime(1469938332)
time.struct_time(tm_year=2016, tm_mon=7, tm_mday=31, tm_hour=4, tm_min=12, tm_sec=12, tm_wday=6, tm_yday=213, tm_isdst=0)


④localtime([seconds]) -> (tm_year,tm_mon,tm_day,tm_hour,tm_min,tm_sec,tm_wday,tm_yday,tm_isdst)

将一个时间戳转换成一个当前时区的struct_time,如果seconds参数未输入,则以当前时间为转换标准。

>>> time.localtime()
time.struct_time(tm_year=2016, tm_mon=7, tm_mday=31, tm_hour=11, tm_min=17, tm_sec=17, tm_wday=6, tm_yday=213, tm_isdst=0)
>>> time.localtime(1469938332)
time.struct_time(tm_year=2016, tm_mon=7, tm_mday=31, tm_hour=12, tm_min=12, tm_sec=12, tm_wday=6, tm_yday=213, tm_isdst=0)


⑤ mktime(tuple) -> floating point number

将一个以struct_time转换为时间戳。

>>> import time
>>> thisTime = "2016-07-31 12:12:12"
>>> timeTuple = time.strptime(thisTime, "%Y-%m-%d %H:%M:%S")
>>> time.mktime(timeTuple)
1469938332.0


⑥ strftime(format[, tuple]) -> string

将指定的struct_time(默认为当前时间),根据指定的格式化字符串输出。

>>> time.strftime("%Y-%m-%d %H:%M:%S")
'2016-07-31 11:20:41'
>>> import time
>>> thisTime = "2016-07-31 12:12:12"
>>> timeTuple = time.strptime(thisTime, "%Y-%m-%d %H:%M:%S")
>>> time.strftime("%Y-%m-%d %H:%M:%S",timeTuple)
'2016-07-31 12:12:12'


⑦strptime(string, format) -> struct_time

将时间字符串根据指定的格式化符转换成数组形式的时间。

>>> import time
>>> thisTime = "2016-07-31 12:12:12"
>>> timeTuple = time.strptime(thisTime, "%Y-%m-%d %H:%M:%S")
>>> print timeTuple
time.struct_time(tm_year=2016, tm_mon=7, tm_mday=31, tm_hour=12, tm_min=12, tm_sec=12, tm_wday=6, tm_yday=213, tm_isdst=-1)


⑧time() -> floating point number

返回当前时间的时间戳。

>>> time.time()
1469935566.776


二、datetime模块

1.datetime中的常量

datetime.MINYEAR,表示datetime所能表示的最小年份,MINYEAR = 1。

datetime.MAXYEAR,表示datetime所能表示的最大年份,MAXYEAR = 9999。

2.datetime中的类

datetime.date:表示日期的类。常用的属性有year, month, day;

datetime.time:表示时间的类。常用的属性有hour, minute, second, microsecond;

datetime.datetime:表示日期时间。

datetime.timedelta:表示时间间隔,即两个时间点之间的长度。

datetime.tzinfo:与时区有关的相关信息。

3.date类

date类表示一个由年、月、日组成的日期。

①类方法与类属性

date类定义了一些常用的类方法与类属性,方便我们操作:

date.max、date.min:date对象所能表示的最大、最小日期;

date.resolution:date对象表示日期的最小单位。这里是天。

date.today():返回一个表示当前本地日期的date对象;

date.fromtimestamp(timestamp):根据给定的时间戮,返回一个date对象;

datetime.fromordinal(ordinal):将Gregorian日历时间转换为date对象;(Gregorian Calendar :一种日历表示方法,类似于我国的农历,西方国家使用比较多,此处不详细展开讨论。)

②实例方法和属性

date提供的实例方法和属性:

date.year、date.month、date.day:年、月、日;

date.replace(year, month,day):生成一个新的日期对象,用参数指定的年,月,日代替原有对象中的属性。(原有对象仍保持不变)

date.timetuple():返回日期对应的time.struct_time对象;

date.toordinal():返回日期对应的Gregorian Calendar日期;

date.weekday():返回weekday,如果是星期一,返回0;如果是星期2,返回1,以此类推;

data.isoweekday():返回weekday,如果是星期一,返回1;如果是星期2,返回2,以此类推;

date.isocalendar():返回格式如(year,month,day)的元组;

date.isoformat():返回格式如’YYYY-MM-DD’的字符串;

date.strftime(fmt):自定义格式化字符串。在下面详细讲解。

③date支持的其他操作

date2 = date1 + timedelta #日期加上一个间隔,返回一个新的日期对象)

date2 = date1 - timedelta #日期隔去间隔,返回一个新的日期对象

timedelta = date1 - date2 #两个日期相减,返回一个时间间隔对象

date1 < date2 #两个日期进行比较

4.Time类

time类表示时间,由时、分、秒以及微秒组成。

①time类定义的类属性

time.min、time.max:time类所能表示的最小、最大时间。其中,time.min = time(0, 0, 0, 0),time.max = time(23, 59, 59, 999999);

time.resolution:时间的最小单位,这里是1微秒;

②time类提供的实例方法和属性

time.hour、time.minute、time.second、time.microsecond:时、分、秒、微秒;

time.tzinfo:时区信息;

time.replace([ hour[ , minute[ , second[ ,microsecond[ , tzinfo] ] ] ] ] ):创建一个新的时间对象,用参数指定的时、分、秒、微秒代替原有对象中的属性(原有对象仍保持不变);

time.isoformat():返回型如”HH:MM:SS”格式的字符串表示;

time.strftime(fmt):返回自定义格式化字符串。在下面详细介绍;

像date一样,也可以对两个time对象进行比较,或者相减返回一个时间间隔对象。

5.datetime类

datetime是date与time的结合体,包括date与time的所有信息。

①datetime类定义的类属性与方法

datetime.min、datetime.max:datetime所能表示的最小值与最大值;

datetime.resolution:datetime最小单位;

datetime.today():返回一个表示当前本地时间的datetime对象;

datetime.now([tz]):返回一个表示当前本地时间的datetime对象,如果提供了参数tz,则获取tz参数所指时区的本地时间;

datetime.utcnow():返回一个当前utc时间的datetime对象;

datetime.fromtimestamp(timestamp[,tz]):根据时间戮创建一个datetime对象,参数tz指定时区信息;

datetime.utcfromtimestamp(timestamp):根据时间戮创建一个datetime对象;

datetime.combine(date, time):根据date和time,创建一个datetime对象;

datetime.strptime(date_string, format):将格式字符串转换为datetime对象;

②datetime类提供的实例方法与属性

datetime.year、month、day、hour、minute、second、microsecond、tzinfo:年、月、日、时、分、秒、毫秒、时区;

datetime.date():获取date对象。

datetime.time():获取time对象。

datetime. replace([ year[ , month[ , day[ , hour[ , minute[ , second[ , microsecond[ ,tzinfo] ] ] ] ] ] ] ]): 返回一个替换了指定日期时间字段的新datetime对象。

datetime.timetuple ():返回一个时间元素, 等价于time.localtime()。

datetime. utctimetuple():返回UTC时间元组对象, 等价于time.localtime()。

datetime. toordinal ():返回日期对应的Gregorian Calendar 日期。

datetime. weekday ():返回 0 ~ 6 表示星期几(星期一是0,依此类推)。

datetime. isocalendar ():返回一个三元组格式 (year, month, day)。

datetime. isoformat ([ sep] ):返回一个 ISO 8601 格式的日期字符串,如 “YYYY-MM-DD”的字符串。

datetime. ctime():返回一个日期时间的C格式字符串,等效于time.ctime(time.mktime(dt.timetuple()));

datetime. strftime (format):返回自定义格式化字符串表示日期。

像date一样,也可以对两个datetime对象进行比较,或者相减返回一个时间间隔对象,或者日期时间加上一个间隔返回一个新的日期时间对象。

6.timedelta与tzinfo类

①timedelta类

datetime.timedelta对象代表两个时间之间的的时间差,两个date或datetime对象相减时可以返回一个timedelta对象。

timedelta包含数据days、seconds、microseconds,表示天数、秒数、微秒数,包含方法total_seconds() ,表示时间间隔的总秒数。

②tzinfo类

tzinfo:与时区有关的相关信息。

三、常见的日期时间操作

1.将字符串格式的日期转换为时间戳

方法:先将其转换为时间元组,再转换为时间戳。

>>> import time
>>> thisTime = "2016-07-31 12:12:12"
>>> timeTuple = time.strptime(thisTime, "%Y-%m-%d %H:%M:%S")
>>> timeStamp = int(time.mktime(timeTuple))
>>> print timeStamp
1469938332


2.将时间戳转换为指定格式的日期

方法一

>>> import time
>>> timeStamp = 1469938332
>>> timeTuple = time.localtime(timeStamp)
>>> otherTime = time.strftime("%Y-%m-%d %H:%M:%S", timeTuple)
>>> print otherTime
2016-07-31 12:12:12


方法二

>>> import datetime
>>> timeStamp = 1469938332
>>> dt= datetime.datetime.utcfromtimestamp(timeStamp)
>>> otherTime = dt.strftime("%Y-%m-%d %H:%M:%S")
>>>  print otherTime
2016-07-31 04:12:12


3.更改日期格式

方法:先转换为时间元组,然后转换为其他格式。

>>> import time
>>> thisTime = "2016-07-31 12:12:12"
>>>timeTuple = time.strptime(thisTime, "%Y-%m-%d %H:%M:%S")
>>>otherTime = time.strftime("%Y/%m/%d %H:%M:%S", timeTuple)
>>> print otherTime
2016/07/31 12:12:12


4.将当前时间并转换为指定日期格式

方法一:

>>> import time
>>> nowStamp = int(time.time())
>>> timeTuple = time.localtime(nowStamp)
>>> otherTime = time.strftime("%Y-%m-%d %H:%M:%S", timeTuple)
>>> print otherTime
2016-07-31 10:19:47


方法二:

>>> import datetime
>>> now = datetime.datetime.now()
>>> otherTime = now.strftime("%Y-%m-%d %H:%M:%S")
>>> print otherTime
2016-07-31 10:21:45


5、获取今天、昨天和明天的日期

>>> import datetime
>>> today = datetime.date.today()
>>> yesterday = today - datetime.timedelta(days=1)
>>> tomorrow = today + datetime.timedelta(days=1)
>>> print "昨天:%s, 今天:%s, 明天:%s" % (yesterday, today, tomorrow)
昨天:2016-07-30, 今天:2016-07-31, 明天:2016-08-01


6.计算前1天、后一天的时间

>>> import datetime
>>> dtOneDayAgo = (datetime.datetime.now() - datetime.timedelta(days = 1)).strftime("%Y-%m-%d %H:%M:%S")
>>> dtOneDayAfter = (datetime.datetime.now() + datetime.timedelta(days = 1)).strftime("%Y-%m-%d %H:%M:%S")
>>> print dtOneDayAgo,dtOneDayAfter
2016-07-30 10:39:54 2016-08-01 10:40:14


7、获取当前的时间

(1)使用time模块

>>> import time
>>> currentTime = time.strftime("%H:%M:%S")
>>> print currentTime
10:44:30


(2)使用datetime模块

>>> import datetime
>>> now = datetime.datetime.now()
>>> currentTime=str(now.hour)+":"+str(now.minute)+":"+str(now.second)
>>> print currentTime
10:52:18


四、日期和时间的格式化参数

%a 星期几的简写

%A 星期几的全称

%b 月分的简写

%B 月份的全称

%c 标准的日期的时间串

%C 年份的后两位数字

%d 十进制表示的每月的第几天

%D 月/天/年

%e 在两字符域中,十进制表示的每月的第几天

%F 年-月-日

%g 年份的后两位数字,使用基于周的年

%G 年分,使用基于周的年

%h 简写的月份名

%H 24小时制的小时

%I 12小时制的小时

%j 十进制表示的每年的第几天

%m 十进制表示的月份

%M 十时制表示的分钟数

%n 新行符

%p 本地的AM或PM的等价显示

%r 12小时的时间

%R 显示小时和分钟:hh:mm

%S 十进制的秒数

%t 水平制表符

%T 显示时分秒:hh:mm:ss

%u 每周的第几天,星期一为第一天 (值从0到6,星期一为0)

%U 第年的第几周,把星期日做为第一天(值从0到53)

%V 每年的第几周,使用基于周的年

%w 十进制表示的星期几(值从0到6,星期天为0)

%W 每年的第几周,把星期一做为第一天(值从0到53)

%x 标准的日期串

%X 标准的时间串

%y 不带世纪的十进制年份(值从0到99)

%Y 带世纪部分的十制年份

%z,%Z时区名称,如果不能得到时区名称则返回空字符。

%% 百分号
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息