python ISO 8601日期表单

2024-09-28 22:43:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我想把日期格式化成这样

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的正确格式?正确的方法是什么?


Tags: 方法密码time格式变体strftimegmtime
3条回答

我开发了这个函数:

def iso_8601_format(dt):
    """YYYY-MM-DDThh:mm:ssTZD (1997-07-16T19:20:30-03:00)"""

    if dt is None:
        return ""

    fmt_datetime = dt.strftime('%Y-%m-%dT%H:%M:%S')
    tz = dt.utcoffset()
    if tz is None:
        fmt_timezone = "+00:00"
    else:
        fmt_timezone = str.format('{0:+06.2f}', float(tz.total_seconds() / 3600))

    return fmt_datetime + fmt_timezone

这对你很有用:

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笔记本上试过了,效果非常好。

如果“%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:]

相关问题 更多 >