如何使用 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/
当运行 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/