python time和datime使用

time模块

UTC(Coordinated Universal Time,世界协调时)亦即格林威治天文时间,世界标准时间。在中国为UTC+8。DST(Daylight Saving Time)即夏令时

time模块主要有三种格式:

  • timestamp 时间戳,表示从1970年1月1日00:00:00 开始按秒计算的偏移量
  • struct_time 时间元组,共有九个元组。
  • format time 格式化时间,已格式的结构使得时间具有更好的可读性,包括自定义格式和固定格式

常用方法:

  1. time.localtime([secs]):将一个时间戳转换为当前时区的struct_time。secs参数未提供,则以当前时间为准
time.localtime()
time.struct_time(tm_year=2017, tm_mon=8, tm_mday=22, tm_hour=12, tm_min=26, tm_sec=36, tm_wday=1, tm_yday=234, tm_isdst=0)

    2.time.gmtime([secs]):和localtime()方法类似,gmtime()方法是将一个时间戳转换为UTC时区(0时区)的struct_time

time.gmtime()
time.struct_time(tm_year=2017, tm_mon=8, tm_mday=22, tm_hour=12, tm_min=27, tm_sec=12, tm_wday=1, tm_yday=234, tm_isdst=0)

    3.time.time():返回当前时间的时间戳

time.time()
1503404864.0598114

    4.time.mktime(t):将一个struct_time转化为时间戳

time.mktime(time.localtime())
1503404894.0

    5.time.sleep(secs):线程推迟指定的时间运行。单位为秒

    6.time.clock():这个需要注意,在不同的系统上含义不同。在UNIX系统上,它返回的是“进程时间”,它是用秒表示的浮点数(时间戳)。而在WINDOWS中,第一次调用,返回的是进程运行的实际时间。而第二次之后的调用是自第一次调用以后到现在的运行时间。(实际上是以WIN32上QueryPerformanceCounter()为基础,它比毫秒表示更为精确)

if __name__ == '__main__':
    time.sleep(1)
    print('clock1: ', time.clock())
    time.sleep(1)
    print('clock1: ', time.clock())
    time.sleep(1)
    print('clock1: ', time.clock())

  7.time.asctime([t]):把一个表示时间的元组或者struct_time表示为这种形式:'Sun Jun 20 23:21:05 1993'。如果没有参数,将会将time.localtime()作为参数传入。

time.asctime()
'Tue Aug 22 12:28:47 2017'

      8.time.ctime([secs]):把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。如果参数未给或者为None的时候,将会默认time.time()为参数。它的作用相当于time.asctime(time.localtime(secs))。

time.ctime()
'Tue Aug 22 12:29:29 2017'
time.ctime(time.time())
'Tue Aug 22 12:29:42 2017'

    9.time.strftime(format[, t]):把一个代表时间的元组或者struct_time(如由time.localtime()和time.gmtime()返回)转化为格式化的时间字符串。如果t未指定,将传入time.localtime()。如果元组中任何一个元素越界,ValueError的错误将会被抛出。

time.strftime('%Y-%m-%d %X')
'2017-08-22 11:57:37'

time.strftime('%Y-%m-%d %H:%M:%S')
'2017-08-22 11:58:36'

 

format time

格式含义
%a本地(locale)简化星期名称
%A本地完整星期名称
%b本地简化月份名称
%B本地完整月份名称
%c本地相应的日期和时间表示
%d一个月中的第几天(01 - 31)
%H一天中的第几个小时(24小时制,00 - 23)
%I第几个小时(12小时制,01 - 12)
%j一年中的第几天(001 - 366)
%m月份(01 - 12)
%M分钟数(00 - 59)
%p本地am或者pm的相应符
%S秒(01 - 61)
%U一年中的星期数。(00 - 53星期天是一个星期的开始。)第一个星期天之前的所有天数都放在第0周。
%w一个星期中的第几天(0 - 6,0是星期天)
%W和%U基本相同,不同的是%W以星期一为一个星期的开始。
%x本地相应日期
%X本地相应时间
%y去掉世纪的年份(00 - 99)
%Y完整的年份
%Z时区的名字(如果不存在为空字符)
%%‘%’字符

datetime模块

以datetime 为中心,转换目标。

  • datetime 
    >>> from datetime import datetime
    >>> now = datetime.now()
    >>> now
    datetime.datetime(2017, 8, 22, 20, 49, 18, 520999)
    >>> type(now)
    <class 'datetime.datetime'>
  • timestamp
    >>> import time
    >>> time.time()
    1503406350.929317
  • time tuple
    >>> time.localtime()
    time.struct_time(tm_year=2017, tm_mon=8, tm_mday=22, tm_hour=20, tm_min=52, tm_sec=54, tm_wday=1, tm_yday=234, tm_isdst=0)
  • string
    >>> datetime.now().strftime('%Y-%m-%d %X')
    '2017-08-22 20:54:14'
  • date
    >>> datetime.now().date()
    datetime.date(2017, 8, 22)

 

datetime 基本操作

1.获取当天date
>>> datetime.now().date()
datetime.date(2017, 8, 22)
from datetime import date
>>> today = date.today()
>>> today
2.获取明天/ 前N天
>>> from datetime import timedelta
>>> datetime.now() + timedelta(days=1)
datetime.datetime(2017, 8, 23, 21, 0, 7, 295142)
3.获取当天开始和结束时间(00:00:00 23:59:59)
>>> datetime.datetime.combine(datetime.date.today(), datetime.time.min)
datetime.datetime(2017, 8, 22, 0, 0)
>>> datetime.datetime.combine(datetime.date.today(), datetime.time.max)
datetime.datetime(2017, 8, 22, 23, 59, 59, 999999)
4.获取两个datetime时间差
>>> (datetime(2015,1,13,12,0,0) - datetime.now()).total_seconds()\
    -82285613.367164
5. 获取本周/本月/ 上月最后一天
>>> datetime.now().date()
datetime.date(2017, 8, 22)
>>> today = datetime.now().date()
>>> today
datetime.date(2017, 8, 22)

>>> sunday = today + timedelta(6-today.weekday())
>>> sunday
datetime.date(2017, 8, 27)
获取本月最后一天
>>> import calendar
>>> today = date.today()
>>> _, day_num = calendar.monthrange(today.year, today.month)
>>> day_num
31
>>> last_day = date(today.year, today.month, day_num)
>>> last_day
datetime.date(2017, 8, 31)
获取上个月最后一天
from datetime import date
>>> today = date.today()
>>> today
datetime.date(2017, 8, 22)
>>> first = date(day=1, month=today.month, year=today.year)

>>> lastMonth = first-timedelta(days=1)
>>> lastMonth
datetime.date(2017, 7, 31)

 

关系转换

Datetime Object / String / timestamp / time tuple

datetime <=> string
>>> datetime.now().strftime('%Y-%m-%d %H:%M:%S')
'2017-08-22 21:36:39'
>>> datetime.strptime("2017-08-22 21:39:36", '%Y-%m-%d %H:%M:%S')
datetime.datetime(2017, 8, 22, 21, 39, 36)
datetime <=> timetuple
>>> datetime.now().timetuple()
time.struct_time(tm_year=2017, tm_mon=8, tm_mday=22, tm_hour=21, tm_min=40, tm_sec=40, tm_wday=1, tm_yday=234, tm_isdst=-1)

timetuple->timestamp->datetime

>>> import time
>>> time.mktime(time.localtime())
1503410219.0
>>> datetime.datetime.fromtimestamp(time.mktime(time.localtime()))
datetime.datetime(2017, 8, 22, 21, 58, 18)

 

datetime <=> date
>>> datetime.now().date()
datetime.date(2017, 8, 22)
>>> import datetime
>>> datetime.time()
datetime.time(0, 0)
>>> today = datetime.date.today()
>>> datetime.datetime.combine(today, datetime.time())
datetime.datetime(2017, 8, 22, 0, 0)
datetime <=> timestamp
>>> now = datetime.now()
>>> timestamp = time.mktime(now.timetuple())
>>> timestamp
1503409670.0
>>> datetime.fromtimestamp(time.time())
datetime.datetime(2017, 8, 22, 21, 49, 38, 72906)

 

转载于:https://my.oschina.net/acutesun/blog/1518913

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值