如何使用自定义日历进行timedelta计算?

时间:2013-07-29 22:35:56

标签: python datetime calendar gregorian-calendar julian-date

我正在编写一个需要能够处理多个日历的程序(主要是标准的“proleptic Gregorian”和“365天”(无跳跃)日历)。 python datetime模块开箱即可处理格里高利历,但我也想让它处理其他日历。

一个简短的例子:

from datetime import datetime
import calendar

def example(year):
    delta = datetime(year, 3, 1) - datetime(year, 2, 28)
    print '%i is a leap year: %s' % (year, calendar.isleap(year))
    print 'Days between 2-28 and 3-1: %s' % delta.days

example(2012)
2012 is a leap year: True
Days between 2-28 and 3-1: 2
example(2013)
2013 is a leap year: False
Days between 2-28 and 3-1: 1

这当然是模块的预期操作,但它不能满足我的特殊需求。我希望能够将日历设置为“noleap”并保留datetime和timedelta的功能。

我想知道是否有人有定义/使用日期时间的自定义日历的经验?

1 个答案:

答案 0 :(得分:1)

如果您编写的函数可以将日期时间从一个日历系统转换为另一个日历系统,那么您可以先将所有输入转换为标准公历,执行所需的数学运算或操作,然后将结果转换回另一个系统。假设您的转换功能正常工作,这可能是工作量最少且容易出错的原因。

更新:刚刚在名为pypijulian上发现了一个看起来可以用来执行此操作的模块。