python ISO 8601日期格式

时间:2015-12-02 14:09:19

标签: python iso8601 strftime

我试图像这样格式化日期,

2015-12-02T12:57:17 + 00:00

这是我的代码

time.strftime("%Y-%m-%dT%H:%M:%S%z", time.gmtime())

给出了这个结果,

2015-12-02T12:57:17 + 0000

我无法看到%z的任何其他变体可以提供+00:00的正确格式?什么是正确的解决方法?

5 个答案:

答案 0 :(得分:1)

这对你有用:

Python - Convert UTC datetime string to local datetime

我复制了代码以便更容易解决,无论如何我都指出了另一个人的答案。

from datetime import datetime,tzinfo,timedelta

class Zone(tzinfo):
    def __init__(self,offset,isdst,name):
        self.offset = offset
        self.isdst = isdst
        self.name = name
    def utcoffset(self, dt):
        return timedelta(hours=self.offset) + self.dst(dt)
    def dst(self, dt):
            return timedelta(hours=1) if self.isdst else timedelta(0)
    def tzname(self,dt):
         return self.name

GMT = Zone(0,False,'GMT')
EST = Zone(-5,False,'EST')

print datetime.utcnow().strftime('%m/%d/%Y %H:%M:%S %Z')
print datetime.now(GMT).strftime('%m/%d/%Y %H:%M:%S %Z')
print datetime.now(EST).strftime('%m/%d/%Y %H:%M:%S %Z')

t = datetime.strptime('2011-01-21 02:37:21','%Y-%m-%d %H:%M:%S')
t = t.replace(tzinfo=GMT)
print t
print t.astimezone(EST)

我已经在我的Python笔记本中尝试过并且运行得很好。

答案 1 :(得分:0)

如果"%z"选项取决于平台,您之后如何添加:呢?

t_str = time.strftime("%Y-%m-%dT%H:%M:%S%z", time.gmtime())
t_str = t_str if t_str[-3] == ':' else  t_str[:-2] + ':' + t_str[-2:]

答案 2 :(得分:0)

我已经开发了这个功能:

<stdarg.h>

答案 3 :(得分:0)

在dateutil [1]和熊猫[2]的帮助下

import dateutil
import pandas as pd

any_date = '20180716'
d = dateutil.parser(any_date)
# d -> datetime.datetime(2018, 7, 16, 0, 0)

d = dateutil.parser.isoparse('2018-07-16')
# d -> datetime.datetime(2018, 7, 16, 0, 0)
d = dateutil.parser.isoparse('20180716')
# d -> datetime.datetime(2018, 7, 16, 0, 0)

pd.to_datetime(d, utc=True)
# -> Timestamp('2018-07-16 00:00:00+0000', tz='UTC')
str(pd.to_datetime(d, utc=True))
# -> '2018-07-16 00:00:00+00:00'  # almost, but it's missing a T

# pandas can convert to UTC, so now we know its '+00:00Z'
pd.to_datetime(d, utc=True).strftime('%Y-%m-%dT%H:%M:%S+00:00Z')
# -> '2018-07-16T00:00:00+00:00Z'

[1] https://dateutil.readthedocs.io/en/stable/_modules/dateutil/parser/isoparser.html

[2] https://pandas.pydata.org/pandas-docs/stable/generated/pandas.to_datetime.html

答案 4 :(得分:0)

感谢isoformat

t = time.strftime("%Y-%m-%dT%H:%M:%S%z", time.gmtime())
t
'2021-06-02T09:28:34+0100'
datetime.strptime(t, '%Y-%m-%dT%H:%M:%S%z').isoformat()
'2021-06-02T09:28:34+01:00'