python日期时间strTime格式

python日期时间strTime格式,python,datetime,Python,Datetime,我有一个日期时间字符串,如: "2016-08-15T07:50:12" 我使用datetime模块中的strtime()函数将字符串转换为datetime对象。我的日期时间格式是 %Y-%m-%dT%H:%m:%S.%f“ 当我解析上述字符串时,函数会因为字符串中缺少毫秒部分而引发ValueError。如果未在字符串中指定毫秒为0的datetime对象,如何使其成为该对象?您需要先解析没有时区的日期,然后再添加时区。不幸的是,您需要为其创建子类tzinfo 您可以使用下面

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

"2016-08-15T07:50:12"
我使用
datetime
模块中的
strtime()
函数将字符串转换为
datetime
对象。我的日期时间格式是

%Y-%m-%dT%H:%m:%S.%f“


当我解析上述字符串时,函数会因为字符串中缺少毫秒部分而引发ValueError。如果未在字符串中指定毫秒为0的
datetime
对象,如何使其成为该对象?

您需要先解析没有时区的日期,然后再添加时区。不幸的是,您需要为其创建子类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)
从datetime导入datetime、timedelta、tzinfo
类固定偏移(tzinfo):
“”“偏移量\u str:str中的固定偏移量:例如,'-0400'”
定义初始(自,偏移量):
符号、小时、分钟=偏移量[0],偏移量[1:3],偏移量[3:]
偏移量=(整数(小时)*60+整数(分钟))*(-1如果符号=“-”则为1)
自偏移量=时间增量(分钟=偏移量)
#注意:最后一部分是提醒大家不要使用POSIX GMT+h时区
#名称中有相反符号的;
#未使用相应的数值,例如,无分钟
“%+d%”(整数(小时)、整数(分钟)、整数(小时)*-1)
def utcoffset(自身,dt=None):
返回自偏移量
def tzname(自身,dt=None):
返回self.\u名称
def dst(自身,dt=无):
返回时间增量(0)
定义报告(自我):
返回“修复偏移(%d)”%(self.utcoffset().total_seconds()/60)
日期,带有“2017-01-12T14:12:06.000-0500”
date_str,tz=日期_与_tz[:-5],日期_与_tz[-5:]
dt_utc=datetime.strtime(date_str,“%Y-%m-%dt%H:%m:%S.%f”)
dt=dt_utc.更换(tzinfo=FixedOffset(tz))
打印(dt)

有关更多信息,请访问

如果您得到类似“2016-08-15T07:50:12”的ISO 8601字符串,我觉得最简单的方法是使用dateutil进行转换

import dateutil.parser
yourdate = dateutil.parser.parse(datestring)

下面可能是您正在查找的代码片段帮助

from datetime import datetime
fmt='%Y-%m-%dT%H:%M:%S'
dt="2016-08-15T07:50:12"

datetime.strptime(dt, fmt)
datetime.datetime(2016, 8, 15, 7, 50, 12)

fmt1='%Y-%m-%dT%H:%M:%S.%f'
dt1="2016-08-15T07:50:12.34" 

datetime.strptime(dt1, fmt1)
datetime.datetime(2016, 8, 15, 7, 50, 12, 340000)

通过添加一个简单的条件语句,您将能够实现。

如果您只需省略
%f
..,结果会是什么?如果我在datetime格式中省略了。%f,则strTime()可以正常工作。但是,当我的字符串上有毫秒时,例如:“2016-08-15T07:50:12.34”。函数raise valueErrorDateTime字符串的格式为ISO 8601;看看。我觉得你应该提到
dateutil
不是一个标准库。不是。最简单的方法是使用。也是。