如何使用 Lib 'dateutil' 转换日期字符串?

How to convert date string by using Lib 'dateutil'?

当运行 dateutil.parser.parse("2017-09-19T04:31:43Z").strftime('%s') in Python时,我得到以下错误:

ValueError: Invalid format string

有什么问题?

相同的代码在 Python 2.

中对我有用
from dateutil.parser import parse
print(parse("2017-09-19T04:31:43Z").strftime('%s'))
# 1505813503

import dateutil.parser
print(dateutil.parser.parse("2017-09-19T04:31:43Z").strftime('%s'))
# 1505813503

OP 声称这不起作用,给出相同的 ValueError: Invalid format string 错误。

一种解释是,根据此 post,您的选项 %s 不存在。参见 valid options of time.strftime here

为什么 %s 在我的系统上工作?

Darren Stone 来自 this post

的精彩回答

In the Python source for datetime and time, the string STRFTIME_FORMAT_CODES tells us:

"Other codes may be available on your platform.
See documentation for the C library strftime function." 

So now if we man strftime (on BSD systems such as Mac OS X), you'll find support for %s:

%s is replaced by the number of seconds since the Epoch, UTC (see mktime(3))." 

你能做什么?

您似乎需要 Unix 时间戳。正如@jleahy here

所建议的

If you want to convert a python datetime to seconds since epoch you should do it explicitly:

datetime.datetime(2012,04,01,0,0).strftime('%s') # '1333234800'
(datetime.datetime(2012,04,01,0,0) - 
 datetime.datetime(1970,1,1)).total_seconds() # 1333238400.0 

In Python 3.3+ you can use timestamp() instead:

datetime.datetime(2012,4,1,0,0).timestamp() # 1333234800.0

可能只是你打错了。也许您打算使用大写 S,它提供秒的格式。如果不是,作为格式字符串的 %s 可能是特定于平台的。

如果您查看 this page,您会看到评论:

Platform specific directives: The full set of format codes supported varies across platforms, because Python calls the platform C library's strftime() function, and platform variations are common.

例如,在 Windows 上,%s(小写)在 strftime 中根本不被接受。 然而,Windows 将识别 %S(大写)并将秒视为零填充的十进制数。

跨平台不兼容的另一个示例:Windows 无法识别格式字符串中的连字符,而它适用于 linux。例如:

print(time.strftime("%-I:%M %p")) #这在 windows

上失败

如果您坚持使用此处提到的与平台无关的格式化字符串选项,则可能最适合您的代码:http://strftime.org/