【发布时间】: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,但我对它的一般功能不是很熟悉。很难正确解析任何可能被视为日期的内容,因此此类事物通常不支持非标准格式,您最终只需要特殊情况。