DateTimeOffset(7)从MSSQL到python datetime?

时间:2017-10-13 07:27:50

标签: python sql-server pyodbc python-datetime datetimeoffset

如何将此字符串2017-10-13 15:30:00.0000000 +00%z之前的< =七(7)零)转换为python日期时间格式。

这是我得到的最新错误:

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'

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分: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来处理它。