您的位置:首页 > 编程语言 > Python开发

关于Python时间的那些事儿

2013-11-05 21:03 549 查看
这段时间主要在河时间计算打交道,因此做了一个小小的总结,比较基础,觉得太基础和没有技术含量的请勿喷,本文所介绍的,一部分来自本人平时用过的,一部分翻译自python官方文档,还有部分摘自网络。
1、首先简单一下介绍在Python中常用的时间表示方式:1)时间戳 2)格式化的时间字符串 3)元组(struct_time)共九个元素;
2、Python中用于时间处理的总共有三个模块:time、datetime、calendar。
Time模块:
1)time.localtime([secs]):将一个时间戳转换为当前时区的struct_time。secs参数未提供,则以当前时间为准(即time.localtime(time.time()))
2)time.gmtime([secs]):和localtime()方法类似,gmtime()方法是将一个时间戳转换为UTC时区(0时区)的struct_time(即time. gmtime (time.time()))
3)time.time():返回当前时间的时间戳。
4)time.mktime(t):将一个struct_time转化为时间戳。
5)time.sleep(secs):线程推迟指定的时间运行。单位为秒。
6)time.asctime([t]):把time.gmtime() 或者 time.localtime()返回的元组或者struct_time格式的时间转换为字符串格式的时间,如Sun Jun 2023:21:05 1993,如果t为空,则默认为time. localtime()
8)time.ctime([secs]):把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。如果参数未给或者为None的时候,将会默认为time.time()
9)time.strftime(format[, t]):把一个由time.localtime()和time.gmtime()返回的元组或者struct_time转化为格式化的时间字符串
10)time.strptime(string[, format]):把一个格式化时间字符串转化为struct_time。实际上它是strftime()的逆操作
11)time.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:
1)date.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
2)date.timetuple():返回一个struct_time格式的时间,功能和time.localtime()类似
3)date.weekday():返回date对象所对应时间是星期几(值从0到6,周日为0,周六为6),例如:
>>> import datetime
>>> d=datetime.date(2013,02,28)
>>> print d.weekday()
3
4)date.isocalendar():返回一个元组:(ISO year(格林威治年份), ISO week number(格林威治周数), ISO weekday(格林威治周几))
5)date.strftime(format):返回date对象format格式的值。
>>> import datetime
>>> d=datetime.date(2013,02,28)
>>> print d. strftime(“%d%m%y”)
‘28/03/13’
6)date.isoformat():返回date对象的标准格式值,格式为‘YYYY-MM-DD’
二、datetime.datetime
<!--[if !supportLists]-->1)  <!--[endif]-->datetime.today():返回当前的本地时间
2)datetime.now([tz]):当tz为None时,返回当前的本地时间(与datetime.today()相同),该方法能够返回一个比time.time()更精确的时间戳。
3)datetime.utcnow():返回当前的UTC时间
4)datetime.fromtimestamp(timestamp[, tz]),根据时区和时间戳,返回一个date对象,timestamp必须为POSIX标准时间戳,如果tz为空,则返回一个本地date对象
5)datetime.utcfromtimestamp(timestamp),与datetime.fromtimestamp相似,但是返回的是一个标准的格林威治date对象
6)datetime.strptime(date_string, format):按照 format格式返回一个date_string对应的datetime对象
7)datetime.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
1)calendar.isleap(year):判断year是否为闰年,如果是闰年则返回True,否则返回False
2)calendar.weekday(year, month, day):根据year、month、day组成的日期判断该天为周几
3)calendar.monthrange(year, month):判断由year和month组成月份,返回该月第一天为周几和该月总共有多少天
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: