python - python datetime strptime 格式
问题描述
我有一个日期时间字符串,例如:
"2016-08-15T07:50:12"
我使用模块中的strptime()
函数datetime
将字符串转换为datetime
对象。我的日期时间格式是
"%Y-%m-%dT%H:%M:%S.%f"
当我解析上面的字符串时,由于字符串中缺少毫秒部分,函数会引发 ValueError 。datetime
当我没有在字符串中指定它时,如何让毫秒为 0 的对象?
解决方案
您需要先解析没有时区的日期,然后再添加时区。不幸的是,您需要为此子类化 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)
欲了解更多信息,请访问链接
推荐阅读
- javascript - onblur="function(this)" 不适用于多个动态创建的文本框
- javascript - JavaScript:使用动态数据显示交互式地图
- mysql - 了解 MySQL 查询优化器
- c# - 由于奇怪的编译错误 CS0234,Razor 无法渲染视图
- reactjs - 使用 `@emotion/core` 和最新版本的 React 时,CodeSandbox 中的“React.createContext 不是函数”
- powershell - 日期转换 yyyymmddhhmm+000
- objective-c - 为什么指向用户定义对象的指针在内存中与用户定义对象本身的地址不同
- testing - 通过 TestCafe 测试使用 AzureAD 进行身份验证
- c# - TopShelf - 服务启动但没有任何效果
- maven - Maven validate - 获取子模块 pom 目录