保留未转换的数据:Python中为.387000

问题描述 投票:10回答:4

我的日期时间是我从文本文件中读取的字符串。我想减少多余的毫秒数,但是我想先将其转换为datetime变量。这是因为取决于文本文件中的内容,它的格式可能不同。但是,我尝试过的所有操作都希望我已经知道该格式。请看看我在这里尝试的内容:

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`

有人可以告诉我如何使用正常的日期时间格式吗?在其他语言中,我可以采用各种格式,然后将其设置为新格式​​而没有问题。

python strftime strptime
4个回答
25
投票

您正在倒退。试试这个:

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

4
投票

您忘记了参考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

0
投票

替代解决方案正在使用split():

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

-2
投票

[如果没有其他改变,即格式,除了在末尾放了微秒,您实际上不需要调用strftime。您可以将它细分为字符串:

mytime = "2015-02-16 10:36:41.387000"
mytime = mytime[:-7]    
print mytime

结果:

2015-02-16 10:36:41

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

© www.soinside.com 2019 - 2024. All rights reserved.