Python之日期与时间处理模块(date和datetime)
|
前言 在开发工作中,我们经常需要用到日期与时间,如:
Python中提供了多个用于对日期和时间进行操作的内置模块:time模块、datetime模块和calendar模块。其中time模块是通过调用C库实现的,所以有些方法在某些平台上可能无法调用,但是其提供的大部分接口与C标准库time.h基本一致。time模块相比,datetime模块提供的接口更直观、易用,功能也更加强大。 一、相关术语的解释
二、时间的表现形式 常见的时间表示形式为:
Python中还有其它的时间表示形式:
关于datetime模块的datetime类会在下面做详细讲解,这里简单说下time.struct_time。 time.struct_time包含如下属性:
属性值的获取方式有两种:
需要说明的是struct_time实例的各个属性都是只读的,不可修改。 三、 time模块 time模块主要用于时间访问和转换,这个模块提供了各种与时间相关的函数。 1. 函数列表
2. 练习 获取时间戳格式的时间 >>> time.time() 1486188022.862 获取struct_time格式的时间 >>> time.localtime() time.struct_time(tm_year=2017,tm_mon=2,tm_mday=4,tm_hour=14,tm_min=2,tm_sec=34,tm_wday=5,tm_yday=35,tm_isdst=0) >>> time.gmtime() time.struct_time(tm_year=2017,tm_hour=6,tm_sec=56,tm_isdst=0) 获取字符串格式的时间 >>> time.ctime() 'Sat Feb 04 14:06:42 2017' >>> time.asctime() 'Sat Feb 04 14:06:47 2017' 时间戳格式转struct_time格式时间 >>> t1 = time.time() >>> print(t1) 1486188476.9 >>> t2 = time.localtime(t1) >>> print(t2) time.struct_time(tm_year=2017,tm_min=7,tm_isdst=0) >>> t3 = time.gmtime(t1) >>> print(t3) time.struct_time(tm_year=2017,tm_isdst=0) >>> 字符串格式转struct_time格式时间
>>> time.strptime('Sat Feb 04 14:06:42 2017')
time.struct_time(tm_year=2017,tm_min=6,tm_sec=42,tm_isdst=-1)
>>> time.strptime('Sat Feb 04 14:06:42 2017','%a %b %d %H:%M:%S %Y')
time.struct_time(tm_year=2017,tm_isdst=-1)
>>> time.strptime('2017-02-04 14:12','%Y-%m-%d %H:%M')
time.struct_time(tm_year=2017,tm_min=12,tm_sec=0,tm_isdst=-1)
>>> time.strptime('2017/02/04 14:12','%Y/%m/%d %H:%M')
time.struct_time(tm_year=2017,tm_isdst=-1)
>>> time.strptime('201702041412','%Y%m%d%H%M')
time.struct_time(tm_year=2017,tm_isdst=-1)
struct_time格式转字符串格式时间
>>> time.strftime('%Y-%m-%d %H:%M',time.localtime())
'2017-02-04 14:19'
struct_time格式转时间戳格式时间
>>> time.mktime(time.localtime())
1486189282.0
3. 时间格式转换 时间戳格式的时间 与 字符串格式的时间 虽然可以通过ctime([secs])方法进行转换,但是字符串格式不太适应中国国情。因此,整体而言,它们 不能直接进行转换,需要通过struct_time作为中介,转换关系如下: 说明:上面的 '%H:%M:%S' 可以直接用 '%X' 代替。 四、 datetime模块 datetime模块提供了处理日期和时间的类,既有简单的方式,又有复杂的方式。它虽然支持日期和时间算法,但其实现的重点是为输出格式化和操作提供高效的属性提取功能。 1. datetime模块中定义的类 datetime模块定义了以下几个类:
需要说明的是:这些类的对象都是不可变的。 类之间的关系: object date datetime time timedelta tzinfo timezone 2. datetime模块中定义的常量
3. datetime.date类 datetime.date类的定义 class datetime.date(year,month,day) year,month 和 day都是是必须参数,各参数的取值范围为:
类方法和属性
对象方法和属性
实例
>>> import time
>>> from datetime import date
>>>
>>> date.max
datetime.date(9999,12,31)
>>> date.min
datetime.date(1,1,1)
>>> date.resolution
datetime.timedelta(1)
>>> date.today()
datetime.date(2017,2,4)
>>> date.fromtimestamp(time.time())
datetime.date(2017,4)
>>>
>>> d = date.today()
>>> d.year
2017
>>> d.month
2
>>> d.day
4
>>> d.replace(2016)
datetime.date(2016,4)
>>> d.replace(2016,3)
>>> d.replace(2016,3,2)
datetime.date(2016,2)
>>> d.timetuple()
time.struct_time(tm_year=2017,tm_hour=0,tm_min=0,tm_isdst=-1)
>>> d.toordinal()
736364
>>> d.weekday()
5
>>> d.isoweekday()
6
>>> d.isocalendar()
(2017,5,6)
>>> d.isoformat()
'2017-02-04'
>>> d.ctime()
'Sat Feb 4 00:00:00 2017'
>>> d.strftime('%Y/%m/%d')
'2017/02/04'
4. datetime.time类 time类的定义 class datetime.time(hour,[minute[,[microsecond[,tzinfo]]]]) hour为必须参数,其他为可选参数。各参数的取值范围为:
类方法和属性
对象方法和属性
实例
>>> from datetime import time
>>>
>>> time.max
datetime.time(23,999999)
>>> time.min
datetime.time(0,0)
>>> time.resolution
datetime.timedelta(0,1)
>>>
>>> t = time(20,40,8888)
>>> t.hour
20
>>> t.minute
5
>>> t.second
40
>>> t.microsecond
8888
>>> t.tzinfo
>>>
>>> t.replace(21)
datetime.time(21,8888)
>>> t.isoformat()
'20:05:40.008888'
>>> t.strftime('%H%M%S')
'200540'
>>> t.strftime('%H%M%S.%f')
'200540.008888'
5. datetime.datetime类 datetime类的定义 复制代码 代码如下: year,month 和 day是必须要传递的参数, tzinfo可以是None或tzinfo子类的实例。 各参数的取值范围为:
如果一个参数超出了这些范围,会引起ValueError异常。 类方法和属性
对象方法和属性
实例
>>> from datetime import datetime,timezone
>>>
>>> datetime.today()
datetime.datetime(2017,4,20,44,556318)
>>> datetime.now()
datetime.datetime(2017,56,572615)
>>> datetime.now(timezone.utc)
datetime.datetime(2017,45,22,881694,tzinfo=datetime.timezone.utc)
>>> datetime.utcnow()
datetime.datetime(2017,52,812508)
>>> import time
>>> datetime.fromtimestamp(time.time())
datetime.datetime(2017,46,41,97578)
>>> datetime.utcfromtimestamp(time.time())
datetime.datetime(2017,989413)
>>> datetime.combine(date(2017,4),t)
datetime.datetime(2017,8888)
>>> datetime.strptime('2017/02/04 20:49','%Y/%m/%d %H:%M')
datetime.datetime(2017,49)
>>> dt = datetime.now()
>>> dt
datetime.datetime(2017,57,621378)
>>> dt.year
2017
>>> dt.month
2
>>> dt.day
4
>>> dt.hour
20
>>> dt.minute
57
>>> dt.second
0
>>> dt.microsecond
621378
>>> dt.tzinfo
>>> dt.timestamp()
1486213020.621378
>>> dt.date()
datetime.date(2017,4)
>>> dt.time()
datetime.time(20,621378)
>>> dt.timetz()
datetime.time(20,621378)
>>> dt.replace()
datetime.datetime(2017,621378)
>>> dt.replace(2016)
datetime.datetime(2016,621378)
>>> dt.timetuple()
time.struct_time(tm_year=2017,tm_hour=20,tm_min=57,tm_isdst=-1)
>>> dt.utctimetuple()
time.struct_time(tm_year=2017,tm_isdst=0)
>>> dt.toordinal()
736364
>>> dt.weekday()
5
>>> dt.isocalendar()
(2017,6)
>>> dt.isoformat()
'2017-02-04T20:57:00.621378'
>>> dt.isoformat(sep='/')
'2017-02-04/20:57:00.621378'
>>> dt.isoformat(sep=' ')
'2017-02-04 20:57:00.621378'
>>> dt.ctime()
'Sat Feb 4 20:57:00 2017'
>>> dt.strftime('%Y%m%d %H:%M:%S.%f')
'20170204 20:57:00.621378'
6. 使用datetime.datetime类对时间戳与时间字符串进行转换 7. datetime.timedelta类 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
