Python——datetime 模块

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

2、datetime模块定义了两个常量:datetime.MINYEAR和datetime.MAXYEAR,分别表示datetime所能表示的最 小、最大年份。其中,MINYEAR = 1,MAXYEAR = 9999

一.  datetime模块定义了下面这几个类:

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

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

3、datetime.datetime:表示日期时间。

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

5、datetime.tzinfo:与时区有关的相关信息。(这里不详细充分讨论该类,感兴趣的童鞋可以参考python手册)
 
注 :datetime.datetime类的应用最为普遍且上面这些类型的对象都是不可变(immutable)的。

二.  datetime.datetime  类中的方法:

1.  today()

today()方法的语法如下:

     datetime.datetime.today()
 
1、此语法中  datetime.datetime  指的是  datetime  模块中的  datetime  类
2、返回值:返回一个表示当前本地时间的  datetime  对象(即可以将返回值赋值给一个变量)
 

>>> import datetime
>>>
>>> datetime.datetime.today()
datetime.datetime(2018, 9, 10, 19, 30, 49, 619604)

2. now([ tz ])  

语法如下:

    datetime.datetime.now([ tz ])
 
1、此语法中  datetime.datetime 指的是  datetime 模块中的 datetime 类
2、如果提供参数 tz,就获取  tz  参数所指时区的本地时间(now是本地时间,可以认为是你电脑现在的时间)
3、返回值:返回当前指定的本地时间
 

>>> import datetime
>>>
>>> datetime.datetime.now()
datetime.datetime(2018, 9, 10, 19, 36, 42, 98379)
>>>
>>>
>>> from datetime import datetime
>>> datetime.now()
datetime.datetime(2018, 9, 10, 19, 36, 54, 963209)

3.  datetime.utcnow()

语法如下:

   datetime.datetime.utcnow()

1、此语法中  datetime.datetime 指的是  datetime 模块中的 datetime 类
2、返回值:返回  utc 时间的  datetime  对象。

>>> import datetime
>>>
>>> datetime.datetime.utcnow()
datetime.datetime(2018, 9, 10, 11, 46, 49, 137510)
>>>
>>> datetime.datetime.now()
datetime.datetime(2018, 9, 10, 19, 46, 56, 698172)

4. fromtimestamp( timestamp [, tz])

语法如下:

   datetime.datetime.fromtimestamp(timestamp[,tz])
 
1、此语法中  datetime.datetime  指的是  datetime  模块中的  datetime  类
2、参数  tz  表示指定的时区信息,参数  timestamp 表示需要转换的时间戳
3、返回值:返回一个datetime 对象,将一个时间戳形式的时间转换为可读形式
 

>>> import time, datetime
>>>
>>> datetime.datetime.fromtimestamp(time.time())
datetime.datetime(2018, 9, 10, 19, 52, 57, 920758)
>>>

5.  utcfromtimestamp( timestamp)

根据时间戳创建一个  datetime  对象。

语法如下:

   datetime.datetime.fromtimestamp(timestamp[,tz])
 
1、此语法中  datetime.datetime  指的是  datetime  模块中的  datetime  类, timestamp  指时间戳。
2、返回值:返回一个 datetime 对象。

>>> import time, datetime
>>>
>>> datetime.datetime.utcfromtimestamp(time.time())
datetime.datetime(2018, 9, 10, 11, 58, 52, 88371)
>>>
>>> datetime.datetime.fromtimestamp(time.time())
datetime.datetime(2018, 9, 10, 19, 58, 56, 832201)

6.  strptime( data_string, format)

str 转换为  datetime

将格式化字符串转换为 datetime 对象

strptime() 方法的语法如下:

    datetime.datetime.strptime(date_string,format)
 
1、此语法中  datetime.datetime  指的是  datetime  模块中的 datetime 类
2、参数 date_string 指日期字符串,format 为格式方式
3、返回值:返回一个  datetime  对象
 

>>> import datetime
>>>
>>> dt  = datetime.datetime.now()
>>>
>>> dt.strptime( str(dt),'%Y-%m-%d  %H:%M:%S.%f')
datetime.datetime(2018, 9, 10, 20, 21, 53, 663043)
>>>
>>> datetime.datetime.strptime( str(dt),'%Y-%m-%d  %H:%M:%S.%f')
datetime.datetime(2018, 9, 10, 20, 21, 53, 663043)

7.  strftime(format)

datetime  转换为  str

strftime()方法的语法如下:

    datetime.datetime.strftime( format )
 
1、此语法中  datetime.datetime  指的是  datetime 模块中的 datetime 类
2、参数  format  为格式化方式
3、返回值:返回一个  datetime  对象
 

>>> import datetime
>>>
>>> now = datetime.datetime.now()
>>>
>>> now.strftime('%Y-%m-%d  %H:%M:%S')
'2018-09-10  21:05:51'

三.  datetime加减

对日期和时间进行加减实际上就是把  datetime  往后或往前计算,得到新的  datetime。加减可以直接用 和 运算符,不过需要导入 timedelta 这个类

>>> from  datetime  import datetime , timedelta
>>>
>>> now = datetime.now()
>>>
>>> now
datetime.datetime(2018, 9, 10, 21, 16, 46, 400495)
>>>
>>>
>>> now + timedelta(hours = 10)
datetime.datetime(2018, 9, 11, 7, 16, 46, 400495)
>>>
>>>
>>> now - timedelta( days = 1)
datetime.datetime(2018, 9, 9, 21, 16, 46, 400495)
>>>
>>> now + timedelta(days = 2,hours = 12)
datetime.datetime(2018, 9, 13, 9, 16, 46, 400495)
>>>

class datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, hours=0, weeks=0)
 

四.  本地时间转换为 UTC 时间

本地时间是指系统设定时区的时间,例如北京时间是UTC+8:00时区的时间,而UTC时间指UTC+0:00时区的时间。

一个datetime类型有一个时区属性 tzinfo,但是默认为 None,所以无法区分这个datetime到底是哪个时区,除非强行给datetime设置一个时区:

>>> from  datetime  import  datetime , timedelta, timezone
>>>
>>> tz_utc_8 = timezone( timedelta(hours = 8))  # 创建时区 UTC+8:00
>>>
>>>
>>> now = datetime.now()
>>>
>>> now
datetime.datetime(2018, 9, 10, 22, 4, 23, 124651)
>>>
>>> dt = now.replace(tzinfo = tz_utc_8)         # 强制设置为UTC+8:00
>>>
>>> dt
datetime.datetime(2018, 9, 10, 22, 4, 23, 124651, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800)))

如果系统时区恰好是UTC+8:00,那么上述代码就是正确的,否则,不能强制设置为UTC+8:00时区。

五.  时区转换

我们可以先通过 utcnow()拿到当前的UTC时间,再转换为任意时区的时间:

# 拿到UTC时间,并强制设置时区为UTC+0:00:
>>> utc_dt = datetime.utcnow().replace(tzinfo=timezone.utc)
>>> print(utc_dt)
2015-05-18 09:05:12.377316+00:00
# astimezone()将转换时区为北京时间:
>>> bj_dt = utc_dt.astimezone(timezone(timedelta(hours=8)))
>>> print(bj_dt)
2015-05-18 17:05:12.377316+08:00
# astimezone()将转换时区为东京时间:
>>> tokyo_dt = utc_dt.astimezone(timezone(timedelta(hours=9)))
>>> print(tokyo_dt)
2015-05-18 18:05:12.377316+09:00
# astimezone()将bj_dt转换时区为东京时间:
>>> tokyo_dt2 = bj_dt.astimezone(timezone(timedelta(hours=9)))
>>> print(tokyo_dt2)
2015-05-18 18:05:12.377316+09:00

时区转换的关键在于,拿到一个 datetime 时,要获知其正确的时区,然后强制设置时区,作为基准时间。

利用带时区的datetime,通过astimezone()方法,可以转换到任意时区。

注:不是必须从UTC+0:00时区转换到其他时区,任何带时区的datetime都可以正确转换,例如上述bj_dttokyo_dt的转换。

猜你喜欢

转载自blog.csdn.net/qq_41573234/article/details/82534542