time、datatime模块

python中时间日期格式化符号

%Y  年份(4位数表示)
%y  年份(2位数表示)
%m  月份(01-12%d  月内中的一天(0-31%H  24小时制小时数
%I  12小时制小时数
%M  分钟数(00=59%S  秒(00-59%a  本地简化星期名称,如:星期三为Web
%A  本地完整星期名称,如:星期三为Wednesday
%b  本地简化星期名称,如:4月份为Apr
%B  本地完整星期名称,如:4月份为April
%c  本地相应的日期表示和时间表示,如:04/07/10 10:43:39
%j  年内的一天(001-366%p  AM或PM的等价符
%U  一年中的星期数(00-53)星期天为星期的开始
%W  一年中的星期数(00-53)星期一为星期的开始
%w  今天在这周的天数(0-6)星期天为星期的开始
%x  本地相应的日期表示,如:09/09/18
%X  本地相应的时间表示,如:11:11:11
%z  与utc时间的间隔(如果是本地时间,返回空字符串)
%Z  时区名称(如果是本地时间,返回空字符串)
%%  %号本身

一、time模块

#常用方法
import time
time.sleep(secs)  #(线程)推迟指定的时间运行,单位为秒
current_time = time.time()  # 获取当前时间戳
print(current_time)

表示时间的三种方式:

  • timestamp(时间戳):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量;运行 type(time.time()),返回的是float类型
  • Format String(格式化的时间字符串):例如 2018-09-09
import time
print(time.strftime("%Y-%m-%d %H:%M:%S"))  # 2018-09-09 20:27:11
  • struct_time(结构化时间,用元组表示):struct_time元组共有9个元素;年、月、日、时、分、秒、一年中第几周、一年中第几天、是否是夏令时

import time
# 结构化时间(元组) print(time.localtime()) # time.struct_time(tm_year=2018, tm_mon=9, tm_mday=9, tm_hour=20, tm_min=38, tm_sec=16, tm_wday=6, tm_yday=252, tm_isdst=0)

总结:

  • 时间戳是计算机能够识别的时间
  • 时间字符串是人能够看懂的时间
  • 结构化时间(元组)则是用来操作时间的

三种时间表示方式的转换:

时间戳 <--> 结构化时间

# 时间戳 --> 结构化时间
# 格式:time.localtime(时间戳)
print(time.localtime(8800000000))
# time.struct_time(tm_year=2248, tm_mon=11, tm_mday=11, tm_hour=4, tm_min=26, tm_sec=40, tm_wday=5, tm_yday=316, tm_isdst=0)

# 结构化时间 --> 时间戳
# 格式:time.mktime(结构化时间)
tuple_time = time.localtime(8800000000)
print(time.mktime(tuple_time))
# 8800000000.0

结构化时间 <--> 字符串时间

# 结构化时间 --> 字符串时间
# 格式:time.strftime("字符串对应格式","结构化时间")  结构化时间参数若不传,则显示当前时间
print(time.strftime("%Y-%m-%d", time.localtime(1000000000)))
# 2001-09-09

# 字符串时间  -->  结构化时间
# 格式:time.strptime("时间字符串","字符串对应格式")
print(time.strptime("2001-09-09", "%Y-%m-%d"))
# time.struct_time(tm_year=2001, tm_mon=9, tm_mday=9, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=6, tm_yday=252, tm_isdst=-1) 

 

# 结构化时间  -->  %a %b %d %H:%M:%S %Y
# 格式:time.asctime(结构化时间)  如果不传参数,直接返回当前时间的格式化字符串
print(time.asctime(time.localtime(1000000000)))
# Sun Sep  9 09:46:40 2001
print(time.asctime(time.localtime()))
# Sun Sep  9 20:58:28 2018

# 时间戳  -->  %a %b %d %H:%M:%S %Y
# 格式:time.ctime(时间戳)  如果不传参数,直接返回当前时间的格式化字符串
print(time.ctime(1000000000))
#Sun Sep  9 09:46:40 2001
print(time.ctime())
#Sun Sep  9 21:00:11 2018

二、datatime模块

import datetime

datetime模块中包含如下类

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

data类

d = datetime.date(2019, 2, 19)
print(d)  # 2019-02-19
print(d.year)
print(d.month)
print(d.day)

d = datetime.date.today()
print(d)  # 2019-02-19

time类

d = datetime.time(21, 36, 37)
print(d)
print(d.hour)
print(d.minute)
print(d.second)

datatime类

d = datetime.datetime(2019, 2, 19, 21, 36, 37)
print(d)  # 2019-02-19 21:36:37

d = datetime.datetime.today()  # datetime.datetime.now()
print(d)  # 2019-02-19 21:36:37.709934

timedelta类

①获取上个月第一天和最后一天的日期

today = datetime.date.today()
print(today)     # 2019-02-19
last_day = datetime.date(today.year, today.month, 1) - datetime.timedelta(1)
print(last_day)  # 2019-01-31
first_day = datetime.date(last_day.year, last_day.month, 1)
print(first_day) # 2019-01-01

②计算当前时间向后8个小时的时间

可以计算:天(days)、小时(hours)、分钟(minutes)、秒(seconds)、微秒(microseconds)

d = datetime.datetime.now()
print(d)  # 2019-02-19 21:39:54.970777

d = d + datetime.timedelta(hours=8)
print(d)  # 2019-02-20 05:39:54.970777

③计算上周一和周日的日期

today = datetime.datetime.today()
today_weekday = today.isoweekday()  # 返回weekday,星期一返回0,星期二返回1,以此类推
last_sunday = today - datetime.timedelta(days=today_weekday)
last_monday = last_sunday - datetime.timedelta(days=6)
print(last_sunday.date())  # 2019-02-17
print(last_monday.date())  # 2019-02-11
原文地址:https://www.cnblogs.com/believepd/p/10403241.html