我正在以"2009-05-28T16:15:00"的格式获取日期时间字符串(我相信这是ISO 8601).一个hackish选项似乎是使用time.strptime并将元组的前六个元素传递给datetime构造函数来解析字符串,如:
datetime.datetime(*time.strptime("2007-03-04T21:08:12", "%Y-%m-%dT%H:%M:%S")[:6])
Run Code Online (Sandbox Code Playgroud)
我无法找到一种"更清洁"的方式来做到这一点.有吗?
我正在尝试使用strptime方法将格式为"2012-07-24T23:14:29-07:00"的时间戳转换为python中的datetime对象.问题在于结束时的时间偏移(-07:00).没有偏移我可以成功做到
time_str = "2012-07-24T23:14:29"
time_obj=datetime.datetime.strptime(time_str,'%Y-%m-%dT%H:%M:%S')
Run Code Online (Sandbox Code Playgroud)
但随着我尝试的抵消
time_str = "2012-07-24T23:14:29-07:00"
time_obj=datetime.datetime.strptime(time_str,'%Y-%m-%dT%H:%M:%S-%z').
Run Code Online (Sandbox Code Playgroud)
但是它给出了一个Value错误,说"z"是一个糟糕的指令.
任何解决方案的想法?
给定这个字符串:"Fri, 09 Apr 2010 14:10:50 +0000"如何将其转换为datetime对象?
做了一些阅读后,我觉得这应该有用,但它不...
>>> from datetime import datetime
>>>
>>> str = 'Fri, 09 Apr 2010 14:10:50 +0000'
>>> fmt = '%a, %d %b %Y %H:%M:%S %z'
>>> datetime.strptime(str, fmt)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib64/python2.6/_strptime.py", line 317, in _strptime
(bad_directive, format))
ValueError: 'z' is a bad directive in format '%a, %d %b %Y %H:%M:%S %z'
Run Code Online (Sandbox Code Playgroud)
应该注意的是,这没有问题:
>>> from datetime import datetime
>>>
>>> str …Run Code Online (Sandbox Code Playgroud) 我必须在python中处理代表iso8601时间戳的字符串.
因此,我的时间戳字符串采用以下形式:
timestamp = "2011-08-18T10:29:47+03:00"
Run Code Online (Sandbox Code Playgroud)
目前我正在使用以下方法在python中转换它们:
timestamp = timestamp[:-6]
timestamp = datetime.datetime.strptime(timestamp, "%Y-%m-%dT%H:%M:%S")
Run Code Online (Sandbox Code Playgroud)
但是这样我就失去了有关时区的所有信息.我在这里看到了很多关于时间戳和python的例子,遗憾的是没有人保留时区,或者只是使用以下方法恢复时区延迟:
delay = timestamp[-6:]
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
timestamp = "2011-08-18T10:29:47+03:00"
timestamp = datetime.datetime.strptime(timestamp, "%Y-%m-%dT%H:%M:%S%z")
Run Code Online (Sandbox Code Playgroud)
但它回来了
ValueError: 'z' is a bad directive in format '%Y-%m-%dT%H:%M:%S%z'
Run Code Online (Sandbox Code Playgroud)
你能提供一些见解吗?
我正在尝试在API中序列化datetime,但我不想要毫秒.我想要的是:https://en.wikipedia.org/wiki/ISO_8601 -"2015-09-14T17:51:31+00:00"
tz = pytz.timezone('Asia/Taipei')
dt = datetime.datetime.now()
loc_dt = tz.localize(dt)
Run Code Online (Sandbox Code Playgroud)
试试A:
loc_dt.isoformat()
>> '2015-09-17T10:46:15.767000+08:00'
Run Code Online (Sandbox Code Playgroud)
试试B:
loc_dt.strftime("%Y-%m-%dT%H:%M:%S%z")
>> '2015-09-17T10:46:15+0800'
Run Code Online (Sandbox Code Playgroud)
后者几乎是完美的,除了在时区部分缺少冒号.如何在没有字符串操作的情况下解决此问题(删除毫秒或添加冒号)?
我正在使用pywin32读取/写入Excel文件。我在Excel中有一些日期,格式为yyyy-mm-dd hh:mm:ss。我想将它们作为datetime.datetime对象导入Python。这是我开始的代码行:
prior_datetime = datetime.strptime(excel_ws.Cells(2, 4).Value, '%Y-%m-%d %H:%M:%S')
Run Code Online (Sandbox Code Playgroud)
那没用。我得到了错误:
strptime() argument 1 must be str, not pywintypes.datetime
Run Code Online (Sandbox Code Playgroud)
我尝试将其转换为字符串,如下所示:
prior_datetime = datetime.strptime(str(excel_ws.Cells(2, 4).Value), '%Y-%m-%d %H:%M:%S')
Run Code Online (Sandbox Code Playgroud)
那也不起作用。我得到了错误:
ValueError: unconverted data remains: +00:00
Run Code Online (Sandbox Code Playgroud)
因此,我尝试了一些不同的方法:
prior_datetime = datetime.fromtimestamp(int(excel_ws.Cells(2, 4).Value))
Run Code Online (Sandbox Code Playgroud)
仍然没有运气。错误:
TypeError: a float is required.
Run Code Online (Sandbox Code Playgroud)
投向浮动广告并没有帮助。也不是整数。(嘿,我当时很绝望。)
我可能在找错地方,但是我在查找有关pywin32的任何常规文档(尤其是pywintypes或pywintypes.datetime)方面的良好文档时遇到了麻烦。
有什么帮助吗?