经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Python » 查看文章
python基础——time模块和datetime模块 - Lu-顺
来源:cnblogs  作者:Lu-顺  时间:2021/6/15 9:18:24  对本文有异议

一、time模块

time模块功能接近于操作系统层面。有些函数是平台相关的(如:time.clock()),可能会在不同的平台有不同的效果。基于Unix Timestamp,所以其所能表述的日期范围被限定在 1970 - 2038 之间。需要处理在前面所述范围之外的日期,可能需要考虑使用datetime模块。

time模块中时间表现的格式主要有三种:

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

struct_time元组属性:

序号属性
0tm_year2008
1tm_mon1 到 12
2tm_mday1 到 31
3tm_hour0 到 23
4tm_min0 到 59
5tm_sec0 到 61 (60或61 是闰秒)
6tm_wday0到6 (0是周一)
7tm_yday1 到 366(儒略历)
8tm_isdst-1, 0, 1, -1是决定是否为夏令时的旗帜

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 时区的名字(如果不存在为空字符)
%% ‘%’字符

常用方法

  • 获取时间
  1. import time
  2. # 获取当地当前,以时间戳格式表现
  3. time.time()
  4. # 获取当地当前,以时间元组格式表现
  5. time.localtime() # 本地时间,东八区
  6. time.gmtime() # 格林威治时间,0时区
  7. # 获取当地当前,以时间格式化形式表现
  8. time.ctime()
  9. time.asctime()
  10. time.strftime("%Y-%m-%d %X")
  • 形式转换
  1. # Timestamp——>struct_time
  2. print("Timestamp——>struct_time:")
  3. timestamp_now = time.time()
  4. time.localtime(timestamp_now)
  5. time.gmtime(timestamp_now)
  6. # struct_time——>formating time
  7. print("struct_time——>formating time:")
  8. structtime_now = time.localtime()
  9. time.strftime('%Y',structtime_now)
  10. time.strftime("%Y-%m-%d %X",structtime_now)
  11. time.asctime(structtime_now)
  12. # formating time——>struct_time
  13. print("formating time——>struct_time:")
  14. formatingtime_now = '2021-06-13 16:37:06'
  15. time.strptime(formatingtime_now,"%Y-%m-%d %X")
  16. time.strptime("30 Nov 00", "%d %b %y")
  17. # struct_time——>Timestamp
  18. print("struct_time——>Timestamp:")
  19. time.mktime(structtime_now)
  20. # Timestamp——>formating time
  21. print("Timestamp——>formating time:")
  22. time.ctime(timestamp_now)

其他:菜鸟教程

二、datetime模块

datetime 基于 time 进行了封装,提供了更多实用的函数接口。在datetime 模块中包含了几个类:

  • datetime:时间和日期
  • date:只关注日期
  • time:只关注时间
  • tzinfo:时区相关
  • timedelta:用于计算时间跨度

实际实用中,用得比较多的是 datetime.datetime 和 datetime.timedelta ,另外两个 datetime.date 和 datetime.time 实际使用和 datetime.datetime 并无太大差别。

1 date类:datetime.date(year, month, day)

  1. from datetime import date
  2. import time
  3. # 静态方法
  4. date.max # date对象所能表示的最大、最小日期;
  5. date.min
  6. date.resolution # date对象表示日期的最小单位:天.
  1. # 构造date对象
  2. date.today() # 返回一个表示当前本地日期的date对象
  3. date(2021, 6, 13) # date对象
  1. # date对象常用方法和属性
  2. now_date = date.today()
  3. now_date.year # 年、月、日
  4. now_date.month
  5. now_date.day
  6. now_date.replace(month=7) # 生成一个新的日期对象,用参数指定的年,月,日代替原有对象中的属性。(原对象仍保持不变)
  7. now_date.timetuple() # 返回日期对应的time.struct_time对象
  8. now_date.weekday() # 返回星期几weekday,如果是星期一,返回0;如果是星期2,返回1,以此类推;(从0开始)
  9. now_date.isoweekday() # 返回weekday,如果是星期一,返回1;如果是星期2,返回2,以此类推;(从1开始)
  10. now_date.isoformat() # 返回格式如'YYYY-MM-DD’的字符串;
  11. now_date.isocalendar() # 返回格式如(year,month,day)的元组;
  12. now_date.strftime(format='%y') # 返回格式化后的字符串,格式和time模块format相同

2 time类

datetime.time(hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] )

  1. from datetime import time
  2. import time
  3. # 静态方法
  4. time.max
  5. time.min
  6. time.resolution # 1微妙
  1. now_time = time(14,9,5,32) # 构造time对象
  2. # 方法和属性
  3. now_time.hour
  4. now_time.minute
  5. now_time.second
  6. now_time.microsecond # 微秒
  7. # now_time.tzinfo # 时区信息
  8. now_time.replace(minute=59)
  9. now_time.isoformat() # 返回型如"HH:MM:SS"格式的字符串表示;
  10. now_time.strftime(format='%H-%M %S') # 格式化输出

3 datetime类

datetime相当于date和time的结合:

  1. datetime.datetime (year, month, day[ , hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] ] )
  1. from datetime import datetime
  2. import time
  3. # 静态方法
  4. datetime.max
  5. datetime.min
  6. datetime.resolution

image

  1. # 构造datetime类:可以根据tz参数指定时区
  2. datetime.today()
  3. datetime.now() # 可以传入tz参数,获取tz参数所指时区的本地时间
  4. datetime.utcnow() # 格林威治时间,0时区 tz=0
  5. # datetime.fromtimestamp(timestamp[, tz]) 根据时间戮创建一个datetime对象,参数tz指定时区信息;
  6. # datetime.utcfromtimestamp(timestamp) 根据时间戮创建一个datetime对象;
  7. # datetime.combine(date, time) 根据date和time,创建一个datetime对象;
  8. # datetime.strptime(date_string, format) 将格式字符串转换为datetime对象;

image

  1. # 一些方法和属性
  2. dt_now=datetime.now()#datetime对象
  3. dt_now
  4. dt_now.year
  5. # dt.year、month、day、hour、minute、second、microsecond、tzinfo
  6. dt_now.replace(year=2020,day=9)
  7. dt_now.timetuple() # 返回日期对应的time.struct_time对象
  8. dt_now.utctimetuple()
  9. dt_now.toordinal()
  10. dt_now.weekday()
  11. dt_now.isoweekday()
  12. dt_now.isocalendar()
  13. dt_now.isoformat()
  14. dt_now.ctime()
  15. dt_now.strftime("%Y %X")

4 timedelta类

  1. from datetime import datetime
  2. from datetime import timedelta
  3. dt = datetime.now()
  4. # 日期偏移操作
  5. dt
  6. tomorrow = dt + timedelta(days=1) # 明天
  7. tomorrow
  8. yesterday = dt + timedelta(days=-1) # 昨天
  9. yesterday
  10. timedelta_ = tomorrow - yesterday # timedelta对象
  11. timedelta_
  12. timedelta_.days # 时间偏移的天数
  13. timedelta_.total_seconds() # 时间偏移的秒数

5 tzinfo类

  1. from datetime import datetime, tzinfo,timedelta
  2. """
  3. tzinfo是关于时区信息的类
  4. tzinfo是一个抽象类,所以不能直接被实例化
  5. """
  6. class UTC(tzinfo):
  7. """UTC"""
  8. def __init__(self,offset = 0):
  9. self._offset = offset
  10. def utcoffset(self, dt):
  11. return timedelta(hours=self._offset)
  12. def tzname(self, dt):
  13. return "UTC +%s" % self._offset
  14. def dst(self, dt):
  15. return timedelta(hours=self._offset)
  16. #北京时间
  17. beijing = datetime(2011,11,11,0,0,0,tzinfo = UTC(8))
  18. #曼谷时间
  19. bangkok = datetime(2011,11,11,0,0,0,tzinfo = UTC(7))
  20. #北京时间转成曼谷时间
  21. beijing.astimezone(UTC(7))
  22. #计算时间差时也会考虑时区的问题
  23. timespan = beijing - bangkok

原文链接:http://www.cnblogs.com/xiaoshun-mjj/p/14879862.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号