zoukankan      html  css  js  c++  java
  • 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
    >>>
  • 相关阅读:
    关于hibernate中多对多关系
    选择排序
    Offer是否具有法律效力?
    textarea文本域宽度和高度(width、height)自己主动适应变化处理
    序列相关的趣题 之三
    windows的定时任务设置
    Maven pom.xml 配置详解
    PS 图像特效-非线性滤波器
    PS 滤镜算法原理——拼贴
    PS 滤镜算法原理——曝光过度
  • 原文地址:https://www.cnblogs.com/qqw-1995/p/9671731.html
Copyright © 2011-2022 走看看