datetime.timedelta

1. 日期的迭代

使用一个生成器来为日期迭代创建一个同内置的 range() 函数一样的函数:以6小时为步长来进行规定范围内日期的迭代生成

>>> from datetime import date,datetime ,timedelta
>>> def date_range(start,stop,step):
...     while start < stop :
... yield start ... start += step ... >>> for d in date_range(datetime(2012,9,1),datetime(2012,10,1),timedelta(hours=6)): ... print d ... 2012-09-01 00:00:00 2012-09-01 06:00:00 ... 2012-09-30 06:00:00 2012-09-30 12:00:00 2012-09-30 18:00:00 >>> 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

2. 字符串转换为日期

如果应用程序接受字符串格式的输入,但是你想将它们转换为 datetime 对象以便在上面执行非字符串操作要怎么去实现呢?
使用Python的标准模块 datetime 可以很容易的解决这个问题。比如:

>>> from datetime import datetime
>>> text = '2016-12-12' >>> y = datetime.strptime(text, '%Y-%m-%d') >>> z = datetime.now() >>> diff = z - y >>> diff datetime.timedelta(253, 786, 548284) >>>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

这里写图片描述
datetime.strptime() 方法支持很多的格式化代码, 比如 %Y 代表4位数年份, %m 代表两
位数月份。 还有一点值得注意的是这些格式化占位符也可以反过来使用,将日期输出为
指定的格式字符串形式。
比如,假设你的代码中生成了一个 datetime 对象, 你想将它格式化为漂亮易读形式后放
在自动生成的信件或者报告的顶部:

>>> z
datetime.datetime(2012, 9, 23, 21, 37, 4, 177393) >>> nice_z = datetime.strftime(z, '%A %B %d, %Y') >>> nice_z 'Sunday September 23, 2012' >>>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

如果你已经知道日期格式是 YYYY-MM-DD ,你可以像下面这样实现一个解析函数,性能比上边的程序要高出很多:
from datetime import datetime
def parse_ymd(s):
year_s, mon_s, day_s = s.split(‘-‘)
return datetime(int(year_s), int(mon_s), int(day_s))
实际测试中,这个函数比 datetime.strptime() 快7倍多。 如果你要处理大量的涉及到日期的数据的话,那么最好考虑下这个方案!

3. 结合时区的日期操作

对几乎所有涉及到时区的问题,你都应该使用 pytz 模块。这个包提供了Olson时区数据库, 它是时区信息的事实上的标准,在很多语言和操作系统里面都可以找到。
pytz 模块一个主要用途是将 datetime 库创建的简单日期对象本地化。 比如,下面如何
表示一个芝加哥时间的示例:

>>> from datetime import datetime
>>> from pytz import timezone >>> d = datetime(2012, 12, 21, 9, 30, 0) >>> print(d) 2012-12-21 09:30:00 >>> >>> # Localize the date for Chicago >>> central = timezone('US/Central') >>> loc_d = central.localize(d) >>> print(loc_d) 2012-12-21 09:30:00-06:00 >>>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

一旦日期被本地化了, 它就可以转换为其他时区的时间了。 为了得到班加罗尔对应的时间,你可以这样做:

>>> # Convert to Bangalore time
>>> bang_d = loc_d.astimezone(timezone('Asia/Kolkata'))
>>> print(bang_d) 2012-12-21 21:00:00+05:30 >>>
  • 1
  • 2
  • 3
  • 4
  • 5

为了不让你被这些东东弄的晕头转向,处理本地化日期的通常的策略先将所有日期转换为
UTC时间, 并用它来执行所有的中间存储和操作。比如:

>>> print(loc_d)
2013-03-10 01:45:00-06:00 >>> utc_d = loc_d.astimezone(pytz.utc) >>> print(utc_d) 2013-03-10 07:45:00+00:00 >>>

猜你喜欢

转载自www.cnblogs.com/qqw-1995/p/9671731.html