【问题标题】:DateTimeOffset(7) like from MSSQL to python datetime?从 MSSQL 到 python 日期时间的 DateTimeOffset(7)?
【发布时间】:2017-10-13 07:27:50
【问题描述】:

如何将此字符串 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'

任何帮助将不胜感激。

【问题讨论】:

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


    【解决方案1】:

    如果您使用的是旧的 ODBC 驱动程序(例如,古老的 DRIVER=SQL Server),那么您应该始终获得一个正好为 34 个字符长的 DATETIMEOFFSET(7) 值的字符串表示形式:

    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 来处理它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-03
      • 2020-11-30
      • 2015-08-05
      • 2017-05-31
      • 2015-04-25
      • 2019-03-04
      • 1970-01-01
      • 2013-01-05
      相关资源
      最近更新 更多