2017-10-13 4 views
1

Wie konvertiert man diese Zeichenfolge 2017-10-13 15:30:00.0000000 +00 (< = sieben (7) Null vor %z) in Python-Datetime-Format.DateTimeOffset (7) wie von MSSQL nach Python Datetime?

dies ist der letzte Fehler, den ich habe:

dt=datetime.datetime.strptime(f,'%Y-%m-%d %H:%M:%S.%f %z') 
    Traceback (most recent call last): 
     File "<stdin>", line 1, in <module> 
     File "C:\Program Files\Python36\lib\_strptime.py", line 565, in _strptime_datetime 
     tt, fraction = _strptime(data_string, format) 
     File "C:\Program Files\Python36\lib\_strptime.py", line 362, in _strptime 
     (data_string, format)) 
    ValueError: time data '2017-10-13 15:30:00.000000 +00' does not match format '%Y-%m-%d %H:%M:%S.%f %z' 

Jede Hilfe würde geschätzt.

Antwort

0

Wenn Sie eine alte ODBC-Treiber verwenden (zB die alte DRIVER=SQL Server), dann bekommen Sie sollten immer eine String-Darstellung des DATETIMEOFFSET (7) Wert, der genau 34 Zeichen lang ist:

2017-10-13 15:30:00.0000000 +00:00 

Sie Alle tun müssen, ist schneiden Sie die siebte Dezimalstelle und entfernen Sie den Doppelpunkt von dem Offset-out ...

s = '2017-10-13 15:30:00.0000000 +00:00' 
f = s[:26] + s[27:31] + s[32:] 
print(repr(f)) 
# '2017-10-13 15:30:00.000000 +0000' 

... und dann analysieren die Zeichenfolge richtig

dt = datetime.datetime.strptime(f,'%Y-%m-%d %H:%M:%S.%f %z') 
print(repr(dt)) 
# datetime.datetime(2017, 10, 13, 15, 30, tzinfo=datetime.timezone.utc) 

Wenn Sie zu einem neueren ODBC-Treiber wechseln, der DATETIMEOFFSET-Spalten erkennt und sie nativ zurückgibt, können Sie ein pyodbc Output Converter function verwenden, um es zu behandeln.

Verwandte Themen