用了一段时间的django开发web项目,也是第一次用python来开发项目,所有有许多相关的知识点需要总结,本文所介绍的python的日期时间处理就是最近用到的,希望对各位有所帮助,也同时作为自己的笔记储存。
Python 提供了time、 calendar、datetime 等模块用于处理日期和时间,较为常用的还是datetime模块。
时间间隔是以秒为单位的浮点小数。
每个时间戳都以自从1970年1月1日午夜(历元)经过了多长时间来表示。
python中时间日期格式化符号:
- %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 当前时区的名称
- %% %号本身
calendar
获取年历
# 返回一个多行字符串格式的year年年历,3个月一行,间隔距离为c
calendar.calendar(2017)
获取日历
# 获取2017年11月日历
>>> print calendar.month(2017, 11)
November 2017
Mo Tu We Th Fr Sa Su
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
获取一周一行的月日历
# 获取2017年11月周日历集合
>>> print calendar.monthcalendar(2017,11)
[[0, 0, 1, 2, 3, 4, 5], [6, 7, 8, 9, 10, 11, 12], [13, 14, 15, 16, 17, 18, 19], [20, 21, 22, 23, 24, 25, 26], [27, 28, 29, 30, 0, 0, 0]]
获取日期为星期几
# 获取2017年11月11日是星期几(0-6代表星期一到星期日)
>>> print calendar.weekday(2017,11,11)
5
datetime
获取当前日期时间
# 获取当前时间(datetime类型)
>>> print datetime.datetime.now()
2017-11-11 17:21:56.076882
# 获取当前日期
>>> print datetime.datetime.now().date()
2017-11-11
>>> print datetime.date.today()
2017-11-11
# 获取当前时间的字符串
>>> print datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
'2017-11-11 17:21:56'
获取当前日期的后几天/前几天
# 获取明天
>>> print datetime.date.today() + datetime.timedelta(days=1)
2017-11-12
>>> print datetime.date.today() + datetime.timedelta(1)
2017-11-12
# 获取昨天
>>> print datetime.date.today() - datetime.timedelta(days=1)
2017-11-10
>>> print datetime.date.today() - datetime.timedelta(1)
2017-11-10
获取本周/本月最后一天及第一天
>>> today = datetime.date.today()
# 获取本周第一天
>>> print today - datetime.timedelta(today.weekday())
2017-11-06
# 获取本周最后一天
>>> print today + datetime.timedelta(6-today.weekday())
2017-11-12
# 获取本月第一天
>>> print datetime.date(today.year, today.month, 1)
2017-11-01
# 获取本月最后一天
>>> first_day_weekday, last_day_num = calendar.monthrange(today.year, today.month)
>>> print datetime.date(today.year, today.month, last_day_num)
2017-11-30
获取当天最小时间/最大时间
# 获取当天最小时间
>>> print datetime.datetime.combine(datetime.date.today(), datetime.time.min)
2017-11-11 00:00:00
# 获取当天最大时间
>>> print datetime.datetime.combine(datetime.date.today(), datetime.time.max)
2017-11-11 23:59:59.999999
time
获取当前时间戳
>>> print time.time()
1510396655.7
获取本地时间
>>> print time.localtime(time.time())
time.struct_time(tm_year=2017, tm_mon=11, tm_mday=11, tm_hour=18, tm_min=13, tm_sec=57, tm_wday=5, tm_yday=315, tm_isdst=0)
获取格式化时间
# 格式化成%Y-%m-%d %H:%M:%S形式
>>> print time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
2017-11-11 18:58:39
# 格式化成%a %b %d %H:%M:%S %Y形式
>>> print time.strftime("%a %b %d %H:%M:%S %Y", time.localtime())
Mon Nov 11 18:58:40 2017
# 将格式字符串转换为时间戳
>>> format_time = time.strptime("2017-11-11 18:58:39", "%Y-%m-%d %H:%M:%S")
>>> print time.mktime(format_time)
1510396712.0
各个时间格式之间的转换
datetime <=> date
# datetime=> date >>> print datetime.datetime.now().date() 2017-11-11 # date => datetime >>> today = datetime.date.today() >>> print datetime.datetime.combine(today, datetime.time.min) 2017-11-11 00:00:00
datetime <=> timestamp
# datetime => timestamp >>> print time.mktime(datetime.datetime.now().timetuple()) 1510396755.0 # timestamp => datetime >>> print datetime.datetime.fromtimestamp(1510396755.0) 2017-11-11 18:39:15
datetime <=> string
# datetime => string >>> print datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") 2017-11-11 18:39:15 # string => datetime >>> print datetime.datetime.strptime("2017-11-11 18:39:15", "%Y-%m-%d %H:%M:%S") 2017-11-11 18:39:15
datetime <=> timetuple
# datetime => timetuple >>> print datetime.datetime.now().timetuple() time.struct_time(tm_year=2017, tm_mon=11, tm_mday=11, tm_hour=18, tm_min=50, tm_sec=57, tm_wday=5, tm_yday=315, tm_isdst=0) # timetuple => datetime >>> time_tuple = datetime.datetime.now().timetuple() >>> print datetime.datetime.fromtimestamp(time.mktime(time_tuple)) 2017-11-11 18:50:35