Python Date实用操作大全!建议收藏!

148 阅读2分钟

「这是我参与2022首次更文挑战的第5天,活动详情查看:2022首次更文挑战」。

  • daterange

    创建一个在start (含) 和 end (不含)之间的日期对象列表。

    • 使用 datetime.timedelta.days 获得 start 和 end之间相隔的天数。

    • 使用 int() 把结果强转成整数, 使用 range() 迭代每一天。

    • 使用列表推导和 datetime.timedelta() 创建一个 datetime.date 对象列表。

from datetime import timedelta, date

def daterange(start, end):
  return [start + timedelta(n) for n in range(int((end - start).days))]
daterange(date(2020, 10, 1), date(2020, 10, 5))
# [date(2020, 10, 1), date(2020, 10, 2), date(2020, 10, 3), date(2020, 10, 4)]
  • from_iso_date

    将 ISO-8601 表示转换为日期。ISO-8601是日期和时间的表示方法。

    • 使用 datetime.datetime.fromisoformat() 将给定的 ISO-8601 日期转换为 datetime.datetime 对象。
from datetime import datetime

def from_iso_date(d):
  return datetime.fromisoformat(d)
from_iso_date('2020-10-28T12:30:59.000000') # 2020-10-28 12:30:59
  • to_iso_date

    将日期转换为其 ISO-8601 表示。

    • 使用 datetime.datetime.isoformat() 将给定的 datetime.datetime 对象转换为 ISO-8601 日期。
from datetime import datetime

def to_iso_date(d):
  return d.isoformat()
to_iso_date(datetime(2020, 10, 25)) # 2020-10-25T00:00:00
  • days_ago

    计算从今天开始的n天前的日期。

    • 使用 datetime.date.today() 来获取当前的日期。

    • 使用 datetime.timedelta 从今天的日期中减去n天。

from datetime import timedelta, date

def days_ago(n):
  return date.today() - timedelta(n)
days_ago(5) # date(2020, 10, 23)
  • days_from_now

    计算从今天起 n 天的日期。

    • 使用 datetime.date.today() 获取当前日期。

    • 使用 datetime.timedelta 从今天的日期开始增加 n 天。

from datetime import timedelta, date

def days_from_now(n):
  return date.today() + timedelta(n)
days_from_now(5) # date(2020, 11, 02)
  • months_diff

    计算两个日期之间的月份差。

    • end 减去 start 并使用 datetime.timedelta.days 来获得日差。

    • 除以 30 并使用 math.ceil() 得到月差(四舍五入)。

from math import ceil

def months_diff(start, end):
  return ceil((end - start).days / 30)
from datetime import date

months_diff(date(2020, 10, 28), date(2020, 11, 25)) # 1
  • add_days

    计算从给定日期算起 n 天的日期。

    • 使用 datetime.timedelta+ 运算符计算 dn 天的 datetime.datetime

    • 若省略第二个参数 d,则使用 datetime.today() 的默认值。

from datetime import datetime, timedelta

def add_days(n, d = datetime.today()):
  return d + timedelta(n)
from datetime import date

add_days(5, date(2020, 10, 25)) # date(2020, 10, 30)
add_days(-5, date(2020, 10, 25)) # date(2020, 10, 20)
  • days_diff

    计算两个日期之间的天差。

    • end 减去 start 并使用 datetime.timedelta.days 来获得日差。
def days_diff(start, end):
  return (end - start).days
from datetime import date

days_diff(date(2020, 10, 25), date(2020, 10, 28)) # 3
  • is_weekday

    检查给定日期是否为工作日。

    • 使用 datetime.datetime.weekday() 以整数形式获取星期几。

    • 检查星期几是否小于或等于 4

    • 若省略第二个参数 d,则使用 datetime.today() 的默认值。

from datetime import datetime

def is_weekday(d = datetime.today()):
  return d.weekday() <= 4
from datetime import date

is_weekday(date(2020, 10, 25)) # False
is_weekday(date(2020, 10, 28)) # True
  • is_weekend

    检查给定日期是否是周末。

    • 使用 datetime.datetime.weekday() 以整数形式获取星期几。

    • 检查星期几是否大于 4

    • 省略第二个参数 d,以使用 datetime.today() 的默认值。

from datetime import datetime

def is_weekend(d = datetime.today()):
  return d.weekday() > 4
from datetime import date

is_weekend(date(2020, 10, 25)) # True
is_weekend(date(2020, 10, 28)) # False