【问题标题】:date comparison in python - how to know which semester datepython中的日期比较-如何知道哪个学期日期
【发布时间】:2013-09-03 18:02:32
【问题描述】:

我不知何故陷入了逻辑思维。

我将比较这两个州的日期:

  1. 夏季学期(16.04 开始 - 14.10 结束)
  2. 冬季学期(15.10 开始 - 15.04 结束)

包括假期

如何查看本月/日的哪个学期?

current_month = datetime.datetime.now().month
current_year = datetime.datetime.now().year
current_day = datetime.datetime.now().day

if current_month>=10 and current_day>=15:
   #winter semester

但我不知何故这样做太混乱了。是否有任何 python 库用于我的问题的日期比较?

【问题讨论】:

  • 为什么 timedelta 在这里有帮助?
  • 我的印象是 datetime 内置了比较方法,因此您可以获取原始日期时间并使用 >、= 等进行比较并得出 True 或 False那个?甚至不必关心切片?

标签: python date datetime python-datetime


【解决方案1】:

您可以生成夏季日期:

current = datetime.date.today()
summer = current.replace(month=4, day=16), current.replace(month=10, day=14)

if summer[0] <= current <= summer[1]:
    # summer semester
else:
    # winter semester

这使用datetime.date() 对象而不是datetime.datetime(),因为这里的时间部分无关紧要。 date.replace() 调用确保我们重用当前年份。

当然,这一切都假设夏季学期每年的开始和结束日期相同。

演示:

>>> import datetime
>>> current = datetime.date.today()
>>> current
datetime.date(2013, 9, 3)
>>> summer = current.replace(month=4, day=16), current.replace(month=10, day=14)
>>> summer[0] <= current <= summer[1]:
True

【讨论】:

  • 我对我在 python 中感到非常满意,因为那里有像你这样的好人可以提供帮助......谢谢老兄。很大的帮助!
  • +1 不错的答案,一个小建议:您可以在这里使用namedtuple,因为summer.startsummer.end 之类的东西看起来比索引更合适。
  • @AshwiniChaudhary:我考虑过;但觉得这对于快速演示来说有点过于冗长了。
  • 我觉得if summer[0] &lt;= current &lt;= summer[1]:这个条件可能更自然一点。
【解决方案2】:

一种方法是创建一个查找表(当您有许多不相交的时间间隔时,这通常是一个好主意,但每个时间间隔都是离散的,例如一天)。

另一个是测试是否是夏天 - 4 月 16 日之后和 10 月 15 日之前。如果不是夏天,那就是冬天。当你只有两个间隔时效果很好 - 如果你有更多,就会分解(混乱的代码)。

【讨论】:

    猜你喜欢
    • 2018-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    相关资源
    最近更新 更多