2015-12-02 9 views
0

я пытаюсь форматировать дату, как это,питон ISO 8601 формат даты

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

вот мой код

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

что дает этот результат,

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

я не могу видеть любые другие вариации% г, что может укажите правильный формат +00: 00? Каков правильный путь?

+1

Смещение с помощью% Z всегда в виде +0000 без символа между ними час/минуту. Это все, что вам нужно? –

+0

Нет, isoformat не решает проблему. И% z зависит от платформы. Я думаю, вы должны придумать решение для партирования для части UTC. –

+0

yep, все, что мне нужно сделать, это включить символ ':'. поэтому пользовательский синтаксический анализ сам по себе является ответом? – user3768071

ответ

0

Это может работать для вас:

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 и отлично работает.

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:] 
+0

Это хорошо, но в одной моей машине это не работает. Я должен пересмотреть правила преобразования, чтобы быть уверенным, почему, но он производит этот результат: '2015-12-02T16: 26: 30Argentina Standard Ti: me' –

+0

Дополнительная информация, Windows 8.1 SO на испанском языке –

+0

У меня есть та же самая «проблема» (то же ОС, тот же вывод), но так как пользователь просто хочет добавить ':', то я оставил его вот так. – tglaria

0

Я разработал эту функцию:

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 
Смежные вопросы