【问题标题】:Transform month abbreviation strings to date in python在python中将月份缩写字符串转换为日期
【发布时间】:2022-01-06 00:50:53
【问题描述】:

我有一个带有缩写月份名称的列表

shortmonth = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']

而且我想把每个元素都做成2020年的日期格式,所以每个元素都会是

'2020-01-01'

作为日期而不是简单的字符串。我对python很陌生,如果有人能解释一下如何做到这一点。

【问题讨论】:

  • 就像2020-XX-01 中的每个元素一样?
  • 是的,每一个都是这种格式,只有月份要改变
  • 您打算在约会时使用datetime.datetime 对象吗?
  • 是的,我也希望能够做到这一点
  • 如果shortmonth 中的列表真的只是按顺序排列的所有月份,则可能有更简单的解决方案,您只需使用数字 1 到 12。

标签: python date-formatting


【解决方案1】:

您可以使用range() 生成月份数字; shortmonth 列表不是必需的。您可以执行以下操作:

print(['2020-{0:02d}-01'.format(i) for i in range(1, 13)])

如果要创建datetime 对象,可以执行以下操作:

from datetime import datetime
print([datetime.strptime('2020-{0:02d}-01'.format(i), "%Y-%m-%d") for i in range(1, 13)])

【讨论】:

  • 这仅适用于shortmonth 中的月份实际上只是一年中的所有月份。
  • 我假设 OP 认为该列表是生成日期所必需的,但事实并非如此。您可能会争辩说,在某些时候可能需要处理 shortmonth 中的元素子集,但这超出了问题的范围。
  • 没错,我认为列表必须是必要的
【解决方案2】:

如果您想使用 datetime.datetimedatetime.date 对象,并假设您希望所有月份都按顺序排列,您可以跳过月份缩写字符串并执行以下操作:

month_starts = [
    datetime.date(year=2020, month=month, day=1)
    for month in range(1, 13)
]

month_starts = [
    datetime.datetime(year=2020, month=month, day=1)
    for month in range(1, 13)
]

如果您确实需要使用月份缩写字符串,您可以执行以下操作:

month_abbr = 'Apr'  # coming from a file, input or from elsewhere in the program

month_number = shortmonth.index(month_abbr) + 1
the_month_start = datetime.date(year=2020, month=month_number, day=1)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2018-08-05
    • 1970-01-01
    • 2014-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多