关于Python时间的那些事儿

SDUTACM 2014-06-03

这段时间主要在和时间计算打交道,因此做了一个小小的总结,比较基础,觉得太基础和没有技术含量的请勿喷,本文所介绍的,一部分来自本人平时用过的,一部分翻译自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_stringformat):按照 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()

....................................................................

>>> # 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(yearmonthday):根据year、month、day组成的日期判断该天为周几

3)calendar.monthrange(yearmonth):判断由year和month组成月份,返回该月第一天为周几和该月总共有多少天

转载自:http://michael8335.iteye.com/blog/1820187

具体:http://www.verydemo.com/demo_c122_i24887.html

相关推荐