【问题标题】:dateutil parser for month/year format: return beginning of month月/年格式的 dateutil 解析器:返回月初
【发布时间】:2019-05-27 14:28:09
【问题描述】:

当我解析日期时,我使用parser.parse 方法自动识别原始文本中的各种语法。当我有一些像“10/2018”这样的字符串时,我的问题就出现了,没有天数信息。默认情况下,解析器在该月的最后一天(此处为 30 日)返回一个日期时间对象;我想更改此行为,以便它返回该月的第一天(例如:datetime(2018, 10, 1, 0, 0))。我怎样才能做到这一点?

from dateutil import parser
mystring = ["10/2018", "05/10/2018", "Oct, 2018"]
[parser.parse(i) for i in mystring]
#### Out[5] [datetime.datetime(2018, 10, 30, 0, 0), datetime.datetime(2018, 5, 10, 0, 0), datetime.datetime(2018, 10, 30, 0, 0)]

谢谢,

【问题讨论】:

  • 十月的最后一天是31号吧?
  • @thebjorn 是的,确实,这很奇怪。 2 月份它是正确的(28 岁),但其他人都 30 岁......这可能值得提出一个新问题!
  • 想通了(dateutil.readthedocs.io/en/stable/_modules/dateutil/parser/… 中的第一行代码)。它给你第 30 天,因为今天是第 30 天...

标签: python regex datetime parsing


【解决方案1】:

快速查看文档 (https://dateutil.readthedocs.io/en/stable/parser.html) 显示 parse() 默认为上个月,除非提供默认日期时间对象:

from datetime import datetime
from dateutil import parser

mystring = ["10/2018", "05/10/2018", "Oct, 2018"]
[parser.parse(i, default=datetime(1978, 1, 1, 0, 0)) for i in mystring]

# [datetime.datetime(2018, 10, 1, 0, 0), datetime.datetime(2018, 5, 10, 0, 0), datetime.datetime(2018, 10, 1, 0, 0)]

【讨论】:

  • 比我早几秒 :-) 不错的答案
  • 您应该提供最后一行的输出。此外,您不需要在 datetime 构造函数中指定尾随零。
  • 谢谢,它运行良好。我没有很好地理解文档中“默认日期时间对象”的概念,谢谢。
  • @thebjorn 可能是真的,但由于这个问题涉及指定值与接受默认值,我认为指定值是首选。
  • 还不错:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-18
  • 2015-02-03
  • 2016-10-23
  • 1970-01-01
  • 2015-04-29
相关资源
最近更新 更多