【问题标题】:Django dateutil parse is changing the date to today's dateDjango dateutil parse 将日期更改为今天的日期
【发布时间】:2016-10-16 13:57:34
【问题描述】:

我正在尝试使用 Django dateutil.pareser.parse() 将日期“2016:09:24 17:08:45”更改为“2016-09-24 17:08:45”。但是当我使用以下代码时:

the_timestamp = self.request.query_params.get('timestamp',0) # = '2016:09:24 17:08:45'
the_parsed_timestamp = dateutil.parser.parse(the_timestamp)

我得到结果 the_parsed_timestamp = '2016-10-16 17:08:45'。 2016-10-16 是今天的日期。

为什么 dateutil.parser.parse 将日期替换为今天的日期(并且不考虑时间部分)?

【问题讨论】:

  • 你知道它的格式总是“%Y:%m:%d %H:%M:S”吗?如果是这样,不要使用dateutil.parser,使用datetime.strptime。也就是说,这似乎是一个错误,您应该在 dateutil's issue tracker 上报告它 - 即使不支持该格式,它也不应该静默失败。
  • 顺便说一句,我怀疑正在发生的事情是将2016:09:24解释为%H:%M:%S,而dateutil的工作方式,如果你连续给它2个HMS三元组,第二个将覆盖第一个。如果您将 2016:09:24 单独传递给解析器,则会出现错误,因为“2016”一小时太大了,所以您实际上只是传递了这个“17:08:45”
  • 哦,好吧,所以解析对于这种格式不够聪明?我的问题是我不确定日期时间会采用什么格式,所以我希望我可以使用像 dateutil parse 这样的聪明实用程序来为我解决这个问题。 dateutil 有替代品吗?
  • @p 我已按照您的建议尝试了 strptime,但出现错误:ValueError: time data '2016:09:24 17:09:18' does not match format '%Y:%m:%d %H:%M:S' 好吧,我现在看到错字了 :)
  • 我认为这只是 dateutil 中的一个错误。你可以试试dateparser,但我对它的一般功能不是很熟悉。很难正确解析任何可能被视为日期的内容,因此此类事物通常不支持非标准格式,您最终只需要特殊情况。

标签: django python-dateutil


【解决方案1】:

您的日期格式错误。应该是:

2016-09-24

不是

2016:09:24

【讨论】:

  • 是的,我知道。输入的日期格式为 2016:09:24 我正在尝试使用 dateutil 解析函数将其转换为正确的格式。除了更改日期之外,它似乎可以这样做!
  • @BillNoble 格式一致吗?也许你可以改用datetime.datetime.strptime('2016:09:24 17:08:45', '%Y:%m:%d %H:%M:%S')
  • 适用于这种特殊情况,但日期格式不一致
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多