首页 > 解决方案 > python datetime strptime 格式

问题描述

我有一个日期时间字符串,例如:

"2016-08-15T07:50:12"

我使用模块中的strptime()函数datetime将字符串转换为datetime对象。我的日期时间格式是

"%Y-%m-%dT%H:%M:%S.%f"

当我解析上面的字符串时,由于字符串中缺少毫秒部分,函数会引发 ValueError 。datetime当我没有在字符串中指定它时,如何让毫秒为 0 的对象?

标签: pythondatetime

解决方案


您需要先解析没有时区的日期,然后再添加时区。不幸的是,您需要为此子类化 tzinfo。

您可以使用下面的代码并根据您的要求进行相应的更改。

from datetime import datetime, timedelta, tzinfo

class FixedOffset(tzinfo):
    """offset_str: Fixed offset in str: e.g. '-0400'"""
    def __init__(self, offset_str):
        sign, hours, minutes = offset_str[0], offset_str[1:3], offset_str[3:]
        offset = (int(hours) * 60 + int(minutes)) * (-1 if sign == "-" else 1)
        self.__offset = timedelta(minutes=offset)
        # NOTE: the last part is to remind about deprecated POSIX GMT+h timezones
        # that have the opposite sign in the name;
        # the corresponding numeric value is not used e.g., no minutes
        '<%+03d%02d>%+d' % (int(hours), int(minutes), int(hours)*-1)
    def utcoffset(self, dt=None):
        return self.__offset
    def tzname(self, dt=None):
        return self.__name
    def dst(self, dt=None):
        return timedelta(0)
    def __repr__(self):
        return 'FixedOffset(%d)' % (self.utcoffset().total_seconds() / 60)

date_with_tz = "2017-01-12T14:12:06.000-0500"
date_str, tz = date_with_tz[:-5], date_with_tz[-5:]
dt_utc = datetime.strptime(date_str, "%Y-%m-%dT%H:%M:%S.%f")
dt = dt_utc.replace(tzinfo=FixedOffset(tz))
print(dt)

欲了解更多信息,请访问链接


推荐阅读