资讯专栏INFORMATION COLUMN

delorean使用教程

henry14 / 2694人阅读

摘要:可以使用进行加减,得到一个对象也支持两个时间比较提供多种方法获取一个指定的时间,如明年或者下周三提供了一些方便的方法进行如上操作。提供了很方便的方法按照微妙秒分钟小时进行过滤同样,也支持按照年月份字符串处理另一个麻烦事是处理格式的字符串。

首先,约定三个概念。

navie datetime:没有指定时区的datetime对象

localized datetime:指定时区的datetime对象

localizing:指定市区的的navie datetime

normalizing:datetime时区切换

一些例子

首先,导入Delorean

*>>> from delorean import Delorean

使用UTC格式的当前时间创建一个datetime

*>>> d = Delorean()
*>>> d
Delorean(datetime=datetime.datetime(2013, 1, 12, 6, 10, 33, 110674),  timezone="UTC")

简单的时区切换

*>>> d = d.shift("US/Eastern")
*>>> d
Delorean(datetime=datetime.datetime(2013, 1, 12, 1, 10, 38, 102223), timezone="US/Eastern")

转换成datetime看看

*>>> d.datetime
datetime.datetime(2013, 1, 12, 01, 10, 38, 102223, tzinfo=)
*>>> d.date
datetime.date(2013, 1, 12)

单纯的输入时间看看

*>>> d.naive()
datetime.datetime(2013, 1, 12, 1, 10, 38, 102223)
*>>> d.epoch()
1357971038.102223

也是用unix时间戳初始化Delorean

*>>> from delorean import epoch
*>>> epoch(1357971038.102223).shift("US/Eastern")
Delorean(datetime=datetime.datetime(2013, 1, 12, 1, 10, 38, 102223), timezone="US/Eastern")

初始化后,就可以方便的切换到自己所需的时区
Delorean也可以使用指定的datetime对象进行初始化,Delorean会自动处理时区和时间

*>>> tz = timezone("US/Pacific")
*>>> dt = tz.localize(datetime.utcnow())
datetime.datetime(2013, 3, 16, 5, 28, 11, 536818, tzinfo=)
*>>> d = Delorean(datetime=dt)
*>>> d
Delorean(datetime=datetime.datetime(2013, 3, 16, 5, 28, 11, 536818), timezone="US/Pacific")
*>>> d = Delorean(datetime=dt, timezone="US/Eastern")
*>>> d
Delorean(datetime=datetime.datetime(2013, 3, 16, 5, 28, 11, 536818), timezone="US/Pacific")

Delorean支持timedelta的时间加减法。Delorean可以使用timedelta进行加减,得到一个Delorean对象

*>>> d = Delorean()
*>>> d
Delorean(datetime=datetime.datetime(2014, 6, 3, 19, 22, 59, 289779), timezone="UTC")
*>>> d += timedelta(hours=2)
*>>> d
Delorean(datetime=datetime.datetime(2014, 6, 3, 21, 22, 59, 289779), timezone="UTC")
*>>> d - timedelta(hours=2)
Delorean(datetime=datetime.datetime(2014, 6, 3, 19, 22, 59, 289779), timezone="UTC")
*>>> d2 = d + timedelta(hours=2)
*>>> d2 - d
datetime.timedelta(0, 7200)

Delorean也支持两个时间比较

*>>> d1 = Delorean(datetime(2015, 1, 1), timezone="US/Pacific")
*>>> d2 = Delorean(datetime(2015, 1, 1, 8), timezone="UTC")
*>>> d1 == d2
True

Delorean提供多种方法获取一个指定的时间,如明年或者下周三
Delorean提供了一些方便的方法进行如上操作。

*>>> d = Delorean()
*>>> d
Delorean(datetime=datetime.datetime(2013, 1, 20, 19, 41, 6, 207481), timezone="UTC")
*>>> d.next_tuesday()
Delorean(datetime=datetime.datetime(2013, 1, 22, 19, 41, 6, 207481), timezone="UTC")

上周二、过去第二个周二午夜

*>>> d.last_tuesday()
Delorean(datetime=datetime.datetime(2013, 1, 15, 19, 41, 6, 207481), timezone="UTC")
*>>> d.last_tuesday(2).midnight()
datetime.datetime(2013, 1, 8, 0, 0, tzinfo=)
过滤

通常情况下我们不关心有多少微妙或者多少秒。例如,我们很难区别同一分钟的两个datetime对象。我们补习吧不关心的字段设置为0。
Delorean提供了很方便的方法按照微妙、秒、分钟、小时进行过滤

*>>> d = Delorean()
*>>> d
Delorean(datetime=datetime.datetime(2013, 1, 21, 3, 34, 30, 418069), timezone="UTC")
*>>> d.truncate("second")
Delorean(datetime=datetime.datetime(2013, 1, 21, 3, 34, 30), timezone="UTC")
*>>> d.truncate("hour")
Delorean(datetime=datetime.datetime(2013, 1, 21, 3, 0), timezone="UTC")

同样,也支持按照年、月份

*>>> d = Delorean(datetime=datetime(2012, 5, 15, 03, 50, 00, 555555), timezone="US/Eastern")
*>>> d
Delorean(datetime=datetime.datetime(2012, 5, 15, 3, 50, 0, 555555), timezone="US/Eastern")
*>>> d.truncate("month")
Delorean(datetime=datetime.datetime(2012, 5, 1), timezone="US/Eastern")
*>>> d.truncate("year")

Delorean(datetime=datetime.datetime(2012, 1, 1), timezone="US/Eastern")

字符串处理

另一个麻烦事是处理datetime格式的字符串。Delorean可以很方便的处理

*>>> from delorean import parse
*>>> parse("2011/01/01 00:00:00 -0700")
Delorean(datetime=datetime.datetime(2011, 1, 1, 7), timezone="UTC")    
歧义字段的处理

Delorean提供了两个字段dayfirst=True and yearfirst=True用来处理相应格式的字符串,如果dayfirst和yearfirst是True

YY-MM-DD

DD-MM-YY

MM-DD-YY

默认情况下,对于May 6th, 2013格式,Delorean返回‘2013-05-06

*>>> parse("2013-05-06")
Delorean(datetime=datetime.datetime(2013, 5, 6), timezone="UTC")

dayfirst和yearfirst的配置如下:

如果dayfirst是False,yearfirst是False

MM-DD-YY

DD-MM-YY

YY-MM-DD

如果dayfirst是True,yearfirst是False

DD-MM-YY

MM-DD-YY

YY-MM-DD

如果dayfirst是False,yearfirst是True

YY-MM-DD

MM-DD-YY

DD-MM-YY

时间步进
*>>> import delorean
*>>> from delorean import stops
*>>> for stop in stops(freq=delorean.HOURLY, count=10):    print stop
...
Delorean(datetime=datetime.datetime(2013, 1, 21, 6, 25, 33), timezone="UTC")
Delorean(datetime=datetime.datetime(2013, 1, 21, 7, 25, 33), timezone="UTC")
Delorean(datetime=datetime.datetime(2013, 1, 21, 8, 25, 33), timezone="UTC")
Delorean(datetime=datetime.datetime(2013, 1, 21, 9, 25, 33), timezone="UTC")
Delorean(datetime=datetime.datetime(2013, 1, 21, 10, 25, 33), timezone="UTC")
Delorean(datetime=datetime.datetime(2013, 1, 21, 11, 25, 33), timezone="UTC")
Delorean(datetime=datetime.datetime(2013, 1, 21, 12, 25, 33), timezone="UTC")
Delorean(datetime=datetime.datetime(2013, 1, 21, 13, 25, 33), timezone="UTC")
Delorean(datetime=datetime.datetime(2013, 1, 21, 14, 25, 33), timezone="UTC")
Delorean(datetime=datetime.datetime(2013, 1, 21, 15, 25, 33), timezone="UTC")

注意:stops只接受naive datetime
可以指定开始和结束的时间

*>>> for stop in stops(freq=delorean.DAILY, count=10, timezone="US/Eastern", start=d1, stop=d2):    print stop
...
Delorean(datetime=datetime.datetime(2012, 5, 6), timezone="US/Eastern")
Delorean(datetime=datetime.datetime(2012, 5, 7), timezone="US/Eastern")
Delorean(datetime=datetime.datetime(2012, 5, 8), timezone="US/Eastern")
Delorean(datetime=datetime.datetime(2012, 5, 9), timezone="US/Eastern")
Delorean(datetime=datetime.datetime(2012, 5, 10), timezone="US/Eastern")
Delorean(datetime=datetime.datetime(2012, 5, 11), timezone="US/Eastern")
Delorean(datetime=datetime.datetime(2012, 5, 12), timezone="US/Eastern")
Delorean(datetime=datetime.datetime(2012, 5, 13), timezone="US/Eastern")
Delorean(datetime=datetime.datetime(2012, 5, 14), timezone="US/Eastern")
Delorean(datetime=datetime.datetime(2012, 5, 15), timezone="US/Eastern")

只指定结束时间是不行的

*>>> for stop in stops(freq=delorean.DAILY, timezone="US/Eastern", stop=d2):    print stop
...
Traceback (most recent call last):
    File "", line 1, in            
               
                                           
                       
                 

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/45400.html

相关文章

  • 推荐11个实用Python库

    1.delorean 非常酷的日期/时间库 from delorean import Delorean EST = US/Eastern d = Delorean(timezone=EST) 2.prettytable 可以在浏览器或终端构建很不错的输出 from prettytable import PrettyTable table = PrettyTable([animal, feroc...

    stackfing 评论0 收藏0
  • 11个你可能不知道的Python库

    摘要:非常酷的日期时间库可以在浏览器或终端构建很不错的输出 1) delorean 非常酷的日期/时间库 from delorean import Delorean EST = US/Eastern d = Delorean(timezone=EST) 2) prettytable 2) prettytable 可以在浏览器或终端构建很不错的输出 from prettytable...

    gnehc 评论0 收藏0
  • 蠎周刊 : 2013最赞

    摘要:译发蠎周刊最赞这周咱们作点儿不同的本文根据大家过去对周刊文章的点击量分析出的年度顶级项目希望大家喜欢如果怕我们错过年的最佳项目请及时邮件知会一下次周我们将恢复期周刊新年新折腾我们发布了现在开始到一月底使用优惠码发布职位信息可以获得的折扣才 译发: 蠎周刊 : 2013最赞 Hi Pythonistas! 这周咱们作点儿不同的 ;-) 本文根据大家过去对周刊文章的点击量分析出的 ...

    lavnFan 评论0 收藏0
  • 蠎周刊 2015 年度最赞

    摘要:蠎周刊年度最赞亲俺们又来回顾又一个伟大的年份儿包去年最受欢迎的文章和项目如果你错过了几期就这一期不会丢失最好的嗯哼还为你和你的准备了一批纪念裇从这儿获取任何时候如果想分享好物给大家在这儿提交喜欢我们收集的任何意见建议通过来吧原文 Title: 蠎周刊 2015 年度最赞Date: 2016-01-09 Tags: Weekly,Pycoder,Zh Slug: issue-198-to...

    young.li 评论0 收藏0
  • ApacheCN 人工智能知识树 v1.0

    摘要:贡献者飞龙版本最近总是有人问我,把这些资料看完一遍要用多长时间,如果你一本书一本书看的话,的确要用很长时间。为了方便大家,我就把每本书的章节拆开,再按照知识点合并,手动整理了这个知识树。 Special Sponsors showImg(https://segmentfault.com/img/remote/1460000018907426?w=1760&h=200); 贡献者:飞龙版...

    刘厚水 评论0 收藏0

发表评论

0条评论

henry14

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<