2015-12-02 2 views
0

je suis en train de formater la date comme celui-ci,python format de date ISO 8601

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

voici mon code

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

ce qui donne ce résultat,

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

je ne vois pas d'autres variations de z% qui peuvent fournir le format correct de +00: 00? Quelle est la bonne façon d'y arriver?

+1

Le décalage en utilisant% z est toujours sous la forme +0000 sans le symbole entre les heures/minute. Est-ce tout ce dont vous avez besoin? –

+0

Non, isoformat ne le résout pas. Et% z dépend de la plateforme. Je pense que vous devriez trouver une solution d'analyse pour la partie UTC. –

+0

Oui, tout ce que je dois faire est d'inclure le symbole ':'. donc l'analyse personnalisée moi-même est la réponse? – user3768071

Répondre

0

Cela peut fonctionner pour vous:

Python - Convert UTC datetime string to local datetime

J'ai copié le code pour le rendre plus facile à aborder, je l'indique il est la réponse d'une autre personne de toute façon.

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) 

Je l'ai essayé dans mon bloc-notes Python et fonctionne parfaitement.

0

Si l'option "% z" dépend de la plateforme, que pensez-vous de simplement ajouter votre : par la suite?

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

C'est une bonne chose mais dans une de mes machines ça ne marche pas. Je devrais revoir les règles de conversion pour être sûr pourquoi mais il produit ce résultat: '2015-12-02T16: 26: 30Argentina Standard Ti: moi' –

+0

Plus d'informations, Windows 8.1 SO en espagnol –

+0

J'ai exactement le même 'problème' (même système d'exploitation, même sortie), mais puisque l'utilisateur veut juste ajouter un ':', alors je l'ai laissé comme ça. – tglaria

0

J'ai développé cette fonction:

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