Python 日期时间类型错误,需要整数

标签 python scripting

我对 Python 还很陌生,所以希望我遇到的问题有一个简单的解决方案。

在工作中,我们总是使用 Shell (ksh) 或 Perl 来完成所有脚本编写工作。由于 Python 随 Solaris 一起提供已经有一段时间了,它(终于)被批准作为脚本平台了。我已经开始使用 Python 对我们的脚本进行一些改进原型(prototype)。

我想要完成的是获取时间戳和表示时间戳的字符串,并为某些日期算术创建日期时间对象。

我的示例代码如下:

#!/bin/python

import datetime

fileTime="201009211100"
format = "YYYYmmdd"

yIdxS = format.find('Y')
yIdxE = format.rfind('Y')

if not fileTime[yIdxS:yIdxE+1].isdigit():
    print "ERROR: Year in wrong format"
    exit
else:
    print "Year [" + fileTime[yIdxS:yIdxE+1] + "]"

mIdxS = format.find('m')
mIdxE = format.rfind('m')

if not fileTime[mIdxS:mIdxE+1].isdigit():
    print "ERROR: Month in wrong format"
    exit
else:
    print "Month [" + fileTime[mIdxS:mIdxE+1] + "]"

dIdxS = format.find('d')
dIdxE = format.rfind('d')

if not fileTime[dIdxS:dIdxE+1].isdigit():
    print "ERROR: Day in wrong format"
    exit
else:
    print "Day [" + fileTime[dIdxS:dIdxE+1] + "]"


old = datetime.date( fileTime[yIdxS:yIdxE+1], \
                     fileTime[mIdxS:mIdxE+1], \
                     fileTime[dIdxS:dIdxE+1] );

我收到以下输出/错误:

Year [2010]
Month [09]
Day [21]
Traceback (most recent call last):
  File "./example.py", line 37, in <module>
    fileTime[dIdxS:dIdxE+1] );
TypeError: an integer is required

我不明白为什么会收到此 TypeError 异常。我对 Python 动态类型的理解是,如果字符串都是数字,我不需要将字符串转换为整数。

所以问题似乎是我错过了我需要的东西,或者我对语言的理解有缺陷。

任何帮助将不胜感激。谢谢。

最佳答案

强烈考虑使用datetime.datetime.strptime :

import datetime

tests=["201009211100","201009211199"]
for fileTime in tests:
    try:
        date=datetime.datetime.strptime(fileTime,'%Y%m%d%H%M')
        print(date)
    except ValueError as err:
        print(fileTime,err)

# 2010-09-21 11:00:00
# ('201009211199', ValueError('unconverted data remains: 9',))

或者,如果您安装第三方模块,dateutil ,你可以这样解析它:

In [106]: import dateutil.parser as dparser

In [107]: dparser.parse('201009211100')
Out[107]: datetime.datetime(2010, 9, 21, 11, 0)

请注意,dateutil 会尝试在您未显式声明格式的情况下解析字符串。必须谨慎使用(测试和控制可接受的输入字符串),否则会出现不明确的日期,dateutil 可能会错误地解析。

关于Python 日期时间类型错误,需要整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3825056/

相关文章:

Python函数在不修改输入列表的情况下返回一个新列表

javascript - 如何在 Django 中使用 npm 包和 ES6 功能?

linux - Bash - 搜索所有脚本的目录

Bash:根据日期执行不同的功能

windows - Windows 批处理脚本中 FOR 命令中的 token 数限制

bash - 从 OS X 中的 bash 脚本,是否可以提示管理员权限?

Python 和使用 ListCtrl 进行多选

Python2.3.4 for Damnsmall Linux OS version2.4.26 on i686

python - 如何在请求 HTTPS 调用中抑制有关缺少证书验证的警告?

python - 在 redis 数据库中插入数据/ key ,以便内存以 GB 为单位