擅长:python、mysql、java
<p>Python有一个处理此问题的标准库:</p>
<pre><code>import dateutil.parser
examples = [
'2020-11-16T06:00:00Z',
'2020-11-16T06:00:00+01:00',
'2020-11-16T06:00:00+01:00Z',
'2020-11-16T06:00:00+02:00',
'2020-11-16T06:00:00.000Z'
]
for e in examples:
try:
print(dateutil.parser.parse(e))
except ValueError:
print(f'Invalid datetime: {e}')
</code></pre>
<p>结果:</p>
<pre class="lang-none prettyprint-override"><code>2020-11-16 06:00:00+00:00
2020-11-16 06:00:00+01:00
Invalid datetime: 2020-11-16T06:00:00+01:00Z
2020-11-16 06:00:00+02:00
2020-11-16 06:00:00+00:00
</code></pre>
<p>@Z4-tier也为您的示例提供了一个解决方案(不过请注意不要只保留字符串的结尾),但是<code>dateutil</code>还将处理更奇特的内容:</p>
<pre><code>print(dateutil.parser.parse('15:45 16 Nov 2020'))
</code></pre>
<p>结果:</p>
<pre class="lang-none prettyprint-override"><code>2020-11-16 15:45:00
</code></pre>
<p>还要注意这一点:</p>
<pre><code> print(dateutil.parser.parse(e).tzinfo)
</code></pre>
<p>如果添加它,您将看到<code>dateutil</code>在结果中包含关于时区的信息,如果只解析字符串的第一部分,这些信息将丢失</p>