Python 日期时间


Python语言中有3种时间表示方式:

  • 时间戮(timestamp, float类型),即UTC时间(全球标准时间)和1970年1月1日0时0分0秒之间相差的秒数表示的时间。
  • 日历时间(struct_time元组),即以年、月、日、时、分、秒、微秒、时区表示的时间。
  • 以字符串表示的日历时间。

日历时间又可以分为UTC日历时间和本地日历时间。UTC日历时间 + 时区差 = 本地日历时间。北京时间和UTC时间的时区差是8小时。

Python中datetime、time、calendar3个模块提供类和函数操作日期和时间。

datetime模块提供了下面几个类:

  • datetime:表示日期和时间,即以年、月、日、时、分、秒、微秒、时区表示的时间。
  • date:仅表示日期,不包含时间,即以年、月、日表示的时间。
  • time:仅表示时间,不包含日期,即以时、分、秒、微秒、时区表示的时间。
  • timedelta:表示两个日期或时间之间的时间间隔。
  • tzinfo:表示时区。

下面是datetime类的例子:

#!/usr/bin/python
from datetime import datetime
import time

print('local now : ', datetime.now())   # 2018-04-30 10:33:12.049992
print('utc now : ', datetime.utcnow())  # 2018-04-30 02:33:12.050019

seconds = time.time()
print('seconds', seconds)   # 1525055677.330904
print('fromtimestamp : ', datetime.fromtimestamp(seconds))          # 2018-04-30 10:33:12.050149
print('utcfromtimestamp : ', datetime.utcfromtimestamp(seconds))    # 2018-04-30 02:33:12.050149

print('strftime : ', datetime.now().strftime('%y/%m/%d'))   # 8/04/30

下面是date类的例子:

#!/usr/bin/python
import time
from datetime import date

now = date.today()
print('now', now)   # 2018-04-30

print(date(2018, 6, 24))    # 2018-06-24

print('fromtimestamp', date.fromtimestamp(time.time())) # 2018-04-30

print('strftime', now.strftime('%Y/%m/%d')) # 2018/04/30

下面是time类的例子:

#!/usr/bin/python
from datetime import time

t = time(hour=6, minute=20, second=10, microsecond=300)
print(t)    # 06:20:10.000300
print('strftime : ', t.strftime("%H:%M:%S %Z")) # 06:20:10

time模块提供了下面几个函数:

  • time:得到当前时间戮。
  • gmtime:时间戮转换成UTC日历时间。
  • localtime:时间戮转换成本地日历时间。
  • mktime:将本地日历时间转换成时间戮。mktime函数是localtime函数的相反操作。
  • ctime:将时间戮转换成以字符串表示的本地日历时间,格式为"Www Mmm dd hh:mm:ss yyyy"。Www是星期几,Mmm是字符表示的月,dd是日。hh:mm:ss是时间,yyyy是年。
  • asctime:将日历时间转换成字符串,格式为“Www Mmm dd hh:mm:ss yyyy\n”。
  • ython-tutorial-date-time
  • sleep:线程睡眠指定秒数。

下面是time模块的例子:

#!/usr/bin/python
import time

seconds = time.time()
print('seconds : ', seconds)    # 1525055811.600664

print('utc now : ', time.asctime(time.gmtime(seconds)))         # Mon Apr 30 02:36:51 2018
print('local now : ', time.asctime(time.localtime(seconds)))    # Mon Apr 30 10:36:51 2018

print('local now format : ', time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(seconds)))   # 2018-04-30 10:36:51

print('mktime : ', time.mktime(time.localtime(seconds)))    # 1525055811.0
print('ctime : ', time.ctime(seconds))  # Mon Apr 30 10:36:51 2018

日期时间运算符

有下面几个运算符用于日期时间:

  • ><:比较两个时间对象。
  • +:日期对象加上一个时间间隔得到一个新的日期对象。
  • -:日期对象减去一个时间间隔得到一个新的日期对象,或两个日期对象相减得到一个时间间隔对象。
  • *:得到时间间隔的倍数。

下面是日期时间运算符的例子:

#!/usr/bin/python
from datetime import datetime, date, timedelta

d1 = date(2018, 6, 24)
d2 = date(2019, 1, 2)
if d2 > d1:
    print('d2 > d1')    # d2 > d1

print('date1 - date2 : ', d2 - d1)  # 192 days, 0:00:00
print('d1 + timedelta : ', d1 + timedelta(days=20))    # 2018-07-14
print('timedelta * 2 : ', 2 * timedelta(days=20))      # 40 days, 0:00:00