未转换的数据仍为:.387000 在Python中。

14

我有一个日期时间字符串,是从文本文件中读取的。 我想要去掉多余的毫秒,但首先我想将其转换为日期时间变量。这是因为它可能因文本文件中的内容而有不同的格式。 但是,我尝试过的所有方法都要求我已经知道格式。请看看我在这里尝试了什么:

import time, datetime

mytime = "2015-02-16 10:36:41.387000"
myTime = time.strptime(mytime, "%Y-%m-%d %H:%M:%S.%f")

myFormat = "%Y-%m-%d %H:%M:%S"

print datetime.datetime.fromtimestamp(time.mktime(time.strptime(mytime, myFormat)))

但这给了我这个错误:

File "python", line 10, in <module>
ValueError: unconverted data remains: .387000`

请问如何进行普通的日期时间格式化?在其他语言中,我可以传入不同的格式,然后将其设置为新格式,而没有问题。

4个回答

31

你做反了,请尝试这个:

from datetime import datetime

mytime = "2015-02-16 10:36:41.387000"
myTime = datetime.strptime(mytime, "%Y-%m-%d %H:%M:%S.%f")

myFormat = "%Y-%m-%d %H:%M:%S"

print "Original", myTime
print "New", myTime.strftime(myFormat)

结果:

Original 2015-02-16 10:36:41.387000
New 2015-02-16 10:36:41

7

您忘记在myFormat中参考微秒。

myFormat = "%Y-%m-%d %H:%M:%S.%f"

无论如何,您都可以用更少的步骤将其转换。
from datetime import datetime

mytime = "2015-02-16 10:36:41.387000"
full = "%Y-%m-%d %H:%M:%S.%f"
myTime = datetime.strptime(mytime, full)
>>> datetime.datetime(2015, 2, 16, 10, 36, 41, 387000)

这里的mytimedatetime对象。如果您想要打印不带微秒的时间,可以使用strftime函数。

myfmt = "%Y-%m-%d %H:%M:%S"
print datetime.strptime(mytime, full).strftime(myfmt)
>>> 2015-02-16 10:36:41

这实际上创建了一个字符串,而不是 OP 的代码试图做的日期时间对象。 - Padraic Cunningham

0

另一种解决方案是使用split()函数:

# mytime is str(timestamp)
datetime.datetime.strptime(mytime.split('.')[0], '%Y-%m-%d %H:%M:%S')

-1
如果除了在末尾删除微秒之外,没有其他变化,即格式不变,则您实际上不需要调用strftime。 您可以直接对其进行子字符串操作:
mytime = "2015-02-16 10:36:41.387000"
mytime = mytime[:-7]    
print mytime

结果:

2015-02-16 10:36:41

免责声明:仅当您不需要重新格式化或重新排列任何内容,并且仅在您尝试删除最后一位时才适用。


这个答案对我来说太粗糙了(1100万行数据),但这是唯一忽略数据的方法。 - Ali Pardhan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接