Python模块--time&datetime

一 概述

在Python中,时间有三种表示方式:

  • 时间戳(timestamp) :通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。即:time.time(),返回的是float类型
  • 格式化的时间字符串(Format String):如:2010-10-10 10:10,即:time.strftime('%Y-%m-%d')
  • 结构化时间(struct_time) :为元组形式,包含9个元素(年,月,日,时,分等),返回struct_time的函数主要有:gmtime(),localtime(),striptime()

二 time模块

2.1 时间形式的转化

image

结构化时间、时间戳转换为固定时间字符串:

image

示例代码:

import time


# 返回当前时间的时间戳
print(time.time())  # 1526639998.3745897

# time.localtime([secs]):将一个时间戳转换为当前时区的struct_time,secs参数未提供,则以当前时间为准
print(time.localtime())  # time.struct_time(tm_year=2018, tm_mon=5, tm_mday=18, tm_hour=18, tm_min=39, tm_sec=58, tm_wday=4, tm_yday=138, tm_isdst=0)

# time.gmtime([secs]):与localtime()方法类似,将一个时间戳转换为UTC时区的(0时区)struct_time,secs参数未提供,则以当前时间为准
print(time.gmtime())  # time.struct_time(tm_year=2018, tm_mon=5, tm_mday=18, tm_hour=10, tm_min=39, tm_sec=58, tm_wday=4, tm_yday=138, tm_isdst=0)

# time.mktime(t):将一个struct_time转换为时间戳
print(time.mktime(time.localtime())) # 1526639999.3745897

# time.sleep(secs):线程推迟指定的时间运行,单位为秒
time.sleep(10)  # 睡眠10s

# time.strftime(format[,t]):把一个代表时间的元组或者struct_time(如由time.localtime()或者time.gmtime()返回)转化为格式化的时间字符串。如果t未指定,将传入time.localtime()
print(time.strftime('%Y-%m-%d %X'))  # 2018-05-18 18:39:58

# time.strptime(string,[,format]):把一个格式化的时间字符串转换为struct_time(结构化时间),它和time.strftime()是逆操作
print(time.strptime('2010-10-10','%Y-%m-%d'))  # time.struct_time(tm_year=2010, tm_mon=10, tm_mday=10, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=6, tm_yday=283, tm_isdst=-1)

# time.asctime([t]):把一个表示时间的元组或者struct_time转换为固定时间字符串(这种形式:Fri May 18 18:39:58 2018)。如果没有参数,则将time.localtime()传入
print(time.asctime())  # Fri May 18 18:39:58 2018

# time.ctime([secs]):把一个时间戳转换为固定时间字符串(time.asctime()形式),如果参数未给或者为None,将会以time.time()为参数。它的作用相当于time.asctime(time.localtime([secs]))
print(time.ctime())  # Fri May 18 18:39:58 2018
print(time.asctime(time.localtime()))  # Fri May 18 18:39:58 2018

2.2 结构化时间元组元素

struct_time

2.3 时间日期格式化符号

  • %y 两位数的年份表示(00-99)
  • %Y 四位数的年份表示(000-9999)
  • %m 月份(01-12)
  • %d 月内中的一天(0-31)
  • %H 24小时制小时数(0-23)
  • %I 12小时制小时数(01-12)
  • %M 分钟数(00=59)
  • %S 秒(00-59)
  • %a 本地简化星期名称
  • %A 本地完整星期名称
  • %b 本地简化的月份名称
  • %B 本地完整的月份名称
  • %c 本地相应的日期表示和时间表示
  • %j 年内的一天(001-366)
  • %p 本地A.M.或P.M.的等价符
  • %U 一年中的星期数(00-53)星期天为星期的开始
  • %w 星期(0-6),星期天为星期的开始
  • %W 一年中的星期数(00-53)星期一为星期的开始
  • %x 本地相应的日期表示
  • %X 本地相应的时间表示
  • %Z 当前时区的名称
  • %% %号本身

三 datetime模块

相比于time模块,datetime模块的接口更直观,更容易调用

datetime模块定义看下面这几个类:

  • datetime.date:表示日期的类。常用的属性有year,month,day
  • datetime.time:表示时间的类。常用的属性有hour,minute,second,microsecond
  • datetime.datetime:表示日期时间
  • datetime.timedelta:表示时间间隔,即两个时间点之间的长度
  • datetime.tzinfo:与时区有关的相关信息

常用的方法仅有以下几个:

import datetime


# datetime.datetime.now():返回当前的datetime日期类型
d = datetime.datetime.now()
print(d.timestamp())  # 1552641244.733234
print(d.today())  # 2019-03-15 17:14:04.733235
print(d.year)  # 2019
print(d.timetuple())  # time.struct_time(tm_year=2019, tm_mon=3, tm_mday=15, tm_hour=17, tm_min=14, tm_sec=4, tm_wday=4, tm_yday=74, tm_isdst=-1)

# datetime.date.fromtimestamp():把一个时间戳转换为datetime日期类型
d = datetime.date.fromtimestamp(666666666)
print(d)  # 1991-02-16

d = datetime.datetime.fromtimestamp(666666666)
print(d)  # 1991-02-16 09:11:06

# 时间运算
d = datetime.datetime.now()
print(d)  # 2019-03-15 17:21:37.785178

d = datetime.datetime.now() + datetime.timedelta(4)  # 当前时间加4天
print(d)  # 2019-03-19 17:21:37.785178

d = datetime.datetime.now() + datetime.timedelta(hours = 4)  # 当前时间加4小时
print(d)  # 2019-03-15 21:21:37.785178

# 时间替换
d = datetime.datetime.now()
print(d.replace(year=2020, month=12, day=12))  # 2020-12-12 17:21:37.785178
posted @ 2018-06-21 18:43  Joe1991  阅读(202)  评论(0)    收藏  举报