设为首页 收藏本站
查看: 937|回复: 0

[经验分享] 关于Python时间的那些事儿

[复制链接]
发表于 2017-5-3 10:08:41 | 显示全部楼层 |阅读模式
这段时间主要在河时间计算打交道,因此做了一个小小的总结,比较基础,觉得太基础和没有技术含量的请勿喷,本文所介绍的,一部分来自本人平时用过的,一部分翻译自python官方文档,还有部分摘自网络。
1、首先简单一下介绍在Python中常用的时间表示方式:1)时间戳 2)格式化的时间字符串 3)元组(struct_time)共九个元素;
2Python中用于时间处理的总共有三个模块:timedatetimecalendar
Time模块:
1time.localtime([secs]):将一个时间戳转换为当前时区的struct_timesecs参数未提供,则以当前时间为准(即time.localtime(time.time())
2time.gmtime([secs]):和localtime()方法类似,gmtime()方法是将一个时间戳转换为UTC时区(0时区)的struct_time(即time. gmtime (time.time())
3time.time():返回当前时间的时间戳。
4time.mktime(t):将一个struct_time转化为时间戳。
5time.sleep(secs):线程推迟指定的时间运行。单位为秒。
6time.asctime([t]):把time.gmtime() 或者 time.localtime()返回的元组或者struct_time格式的时间转换为字符串格式的时间,如Sun Jun 2023:21:05 1993,如果t为空,则默认为time. localtime()
8time.ctime([secs]):把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。如果参数未给或者为None的时候,将会默认为time.time()
9time.strftime(format[, t]):把一个由time.localtime()time.gmtime()返回的元组或者struct_time转化为格式化的时间字符串
10time.strptime(string[, format]):把一个格式化时间字符串转化为struct_time。实际上它是strftime()的逆操作
11time.timezone:当前时区与格林威治时间相差的秒数,例如中国为-28800-8*3600)通过这个属性可以判断当前的时区。
Datetime模块:
datetime模块定义了下面这几个类:

  • datetime.date:表示日期的类。常用的属性有year, month, day
  • datetime.time:表示时间的类。常用的属性有hour, minute, second, microsecond
  • datetime.datetime:表示日期时间。
  • datetime.timedelta:表示时间间隔,即两个时间点之间的长度。
  • datetime.tzinfo:与时区有关的相关信息
这里主要介绍两个类:
一、datetime.date
1date.replace(year, month, day):返回date对象的实际值,如果参数值与date对象的实际值不相等时,则返回date对象修改后的新值,但是date对象的原值不改变。例如
>>> import datetime
>>> d=datetime.date(2013,12,12)
>>> print d
2013-12-12
>>> print d.replace()
2013-12-12
>>> print d.replace(day=2)
2013-12-02
>>> print d
2013-12-12
2date.timetuple():返回一个struct_time格式的时间,功能和time.localtime()类似
3date.weekday():返回date对象所对应时间是星期几(值从06,周日为0,周六为6),例如:
>>> import datetime
>>> d=datetime.date(2013,02,28)
>>> print d.weekday()
3
4date.isocalendar():返回一个元组:(ISO year(格林威治年份), ISO week number(格林威治周数), ISO weekday(格林威治周几))
5date.strftime(format):返回date对象format格式的值。
>>> import datetime
>>> d=datetime.date(2013,02,28)
>>> print d. strftime(“%d%m%y”)
‘28/03/13’
6date.isoformat():返回date对象的标准格式值,格式为‘YYYY-MM-DD’
二、datetime.datetime
<!--[if !supportLists]-->1)  <!--[endif]-->datetime.today():返回当前的本地时间
2datetime.now([tz]):当tzNone时,返回当前的本地时间(与datetime.today()相同),该方法能够返回一个比time.time()更精确的时间戳。
3datetime.utcnow():返回当前的UTC时间
4datetime.fromtimestamp(timestamp[, tz]),根据时区和时间戳,返回一个date对象,timestamp必须为POSIX标准时间戳,如果tz为空,则返回一个本地date对象
5datetime.utcfromtimestamp(timestamp),与datetime.fromtimestamp相似,但是返回的是一个标准的格林威治date对象
6datetime.strptime(date_stringformat):按照 format格式返回一个date_string对应的datetime对象
7datetime.strftime(format):按照format格式,返回date对象的值(字符串)
 PS1, datetime对象的一些实例:
>>> from datetime import datetime, date, time
>>> # Using datetime.combine()
>>> d = date(2005, 7, 14)
>>> t = time(12, 30)
>>> datetime.combine(d, t)
datetime.datetime(2005, 7, 14, 12, 30)
>>> # Using datetime.now() or datetime.utcnow()
>>> datetime.now()  
datetime.datetime(2007, 12, 6, 16, 29, 43, 79043)   # GMT +1
>>> datetime.utcnow()  
datetime.datetime(2007, 12, 6, 15, 29, 43, 79060)
>>> # Using datetime.strptime()
>>> dt = datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M")
>>> dt
datetime.datetime(2006, 11, 21, 16, 30)
>>> # Using datetime.timetuple() to get tuple of all attributes
>>> tt = dt.timetuple()
>>> for it in tt:  
...     print it
...
2006    # year
11      # month
21      # day
16      # hour
30      # minute
0       # second
1       # weekday (0 = Monday)
325     # number of days since 1st January
-1      # dst - method tzinfo.dst() returned None
>>> # Date in ISO format
>>> ic = dt.isocalendar()
>>> for it in ic:  
...     print it
...
2006    # ISO year
47      # ISO week
2       # ISO weekday
>>> # Formatting datetime
>>> dt.strftime("%A, %d. %B %Y %I:%M%p")
'Tuesday, 21. November 2006 04:30PM'
 
PS2,datetime带时区的一些实例:
>>> from datetime import timedelta, datetime, tzinfo
>>> class GMT1(tzinfo):
...     def utcoffset(self, dt):
...         return timedelta(hours=1) + self.dst(dt)
...     def dst(self, dt):
...         # DST starts last Sunday in March
...         d = datetime(dt.year, 4, 1)   # ends last Sunday in October
...         self.dston = d - timedelta(days=d.weekday() + 1)
...         d = datetime(dt.year, 11, 1)
...         self.dstoff = d - timedelta(days=d.weekday() + 1)
...         if self.dston <=  dt.replace(tzinfo=None) < self.dstoff:
...             return timedelta(hours=1)
...         else:
...             return timedelta(0)
...     def tzname(self,dt):
...          return "GMT +1"
...
>>> class GMT2(tzinfo):
...     def utcoffset(self, dt):
...         return timedelta(hours=2) + self.dst(dt)
...     def dst(self, dt):
...         d = datetime(dt.year, 4, 1)
...         self.dston = d - timedelta(days=d.weekday() + 1)
...         d = datetime(dt.year, 11, 1)
...         self.dstoff = d - timedelta(days=d.weekday() + 1)
...         if self.dston <=  dt.replace(tzinfo=None) < self.dstoff:
...             return timedelta(hours=1)
...         else:
...             return timedelta(0)
...     def tzname(self,dt):
...         return "GMT +2"
...
>>> gmt1 = GMT1()
>>> # Daylight Saving Time
>>> dt1 = datetime(2006, 11, 21, 16, 30, tzinfo=gmt1)
>>> dt1.dst()
datetime.timedelta(0)
>>> dt1.utcoffset()
datetime.timedelta(0, 3600)
>>> dt2 = datetime(2006, 6, 14, 13, 0, tzinfo=gmt1)
>>> dt2.dst()
datetime.timedelta(0, 3600)
>>> dt2.utcoffset()
datetime.timedelta(0, 7200)
>>> # Convert datetime to another time zone
>>> dt3 = dt2.astimezone(GMT2())
>>> dt3    
datetime.datetime(2006, 6, 14, 14, 0, tzinfo=<GMT2 object at 0x...>)
>>> dt2    
datetime.datetime(2006, 6, 14, 13, 0, tzinfo=<GMT1 object at 0x...>)
>>> dt2.utctimetuple() == dt3.utctimetuple()
True
Calendar
1calendar.isleap(year):判断year是否为闰年,如果是闰年则返回True,否则返回False
2calendar.weekday(yearmonthday):根据yearmonthday组成的日期判断该天为周几
3calendar.monthrange(yearmonth):判断由yearmonth组成月份,返回该月第一天为周几和该月总共有多少天

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-372422-1-1.html 上篇帖子: Python 2.7 Tutorial —— 数据结构 下篇帖子: python小例子系列启动之公示
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表