2017-10-13 70 views
1

如何將此字符串2017-10-13 15:30:00.0000000 +00(< =七(7)零在%z之前清零)轉換爲python datetime格式。DateTimeOffset(7)像從MSSQL到python datetime?

這是我得到了最新的錯誤:

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' 

任何幫助,將不勝感激。

回答

0

如果您使用的是舊ODBC驅動程序(例如,古DRIVER=SQL Server),那麼你應該總是得到DATETIMEOFFSET(7)值是長恰好34個字符的字符串表示:

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

所有你需要做的是修剪出第七位小數,並從偏移去除結腸...

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' 

...然後該字符串將正確解析

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) 

如果您切換到可識別DATETIMEOFFSET列的新ODBC驅動程序並將其原生返回,那麼您可以使用pyodbc Output Converter function來處理它。

相關問題