Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python xlrd";“年份超出范围”;错误,xldate作为元组_Python_Xlrd - Fatal编程技术网

Python xlrd";“年份超出范围”;错误,xldate作为元组

Python xlrd";“年份超出范围”;错误,xldate作为元组,python,xlrd,Python,Xlrd,我试图使用xldate\u as\u tuple函数将电子表格中两个单独单元格中的datetime和time值转换为python datetime和time。我打算将当前分离的值组合成一个python日期时间值,以便稍后在代码中使用 我可以获取要转换的日期行值,但时间字段有问题。我认为这取决于excel中时间单元格的格式 在我的情况下,电子表格中的时间字段采用以下格式: 00/01/1900 16:47或00/01/1900 17:06。我感兴趣的是时间(即不是00/01/1900位)。想想看,

我试图使用
xldate\u as\u tuple
函数将电子表格中两个单独单元格中的datetime和time值转换为python datetime和time。我打算将当前分离的值组合成一个python日期时间值,以便稍后在代码中使用

我可以获取要转换的日期行值,但时间字段有问题。我认为这取决于excel中时间单元格的格式

在我的情况下,电子表格中的时间字段采用以下格式: 00/01/1900 16:47或00/01/1900 17:06。我感兴趣的是时间(即不是00/01/1900位)。想想看,日期的'00'位不是一个月中的有效日期,所以我想这就是我的问题所在

思想被视为获得时间价值的最佳途径。如果<代码> XLDATEYASHUTUPLE <代码>将不适用于我的情况,那么我是否应该考虑如何将单元格中的值作为文本并解析它?


Cheers

xldate\u as\u tuple
如广告所示,产生(年、月、日、时、分、秒)tuple。问题在于您对该元组所做的操作,在您的示例中,每年、每月和每天都将有0

简短答复:

如果需要时间值,请调用
datetime.time
,而不是
datetime.datetime

长答覆:

打开Excel。在单元格A1中,键入
16:47:00
。将其复制到B1和C1中。使用自定义格式格式化B1
yyyy-mm-dd hh:mm:ss
。您应该看到
1900-01-00 16:47:00
。在单元格D1中键入
=(16+47/60)/24
,然后将C1和D1格式化为带8位小数的数字。您应该在C1和D1中看到
0.699305556

启动
xlrd
并尝试
xlrd.xldate\u as\u元组

>>> import xlrd
>>> b = xlrd.open_workbook('xlrd_time.xls')
>>> s = b.sheet_by_index(0)
>>> s.row_values(0)
[0.6993055555555556, 0.6993055555555556, 0.6993055555555556, 0.6993055555555556]
>>> [xlrd.xldate_as_tuple(t, 0) for t in s.row_values(0)]
[(0, 0, 0, 16, 47, 0), (0, 0, 0, 16, 47, 0), (0, 0, 0, 16, 47, 0), (0, 0, 0, 16, 47, 0)]
>>>
将您每天的零头放入
datetime
模块区域:您的数据要么是一天中的某个时间,要么是一个持续时间(“timedelta”),因此:

您的数据不是“日期时间”;尝试创建日期时间将失败,因为您发现:

>>> datetime.datetime(*x)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: year is out of range
>datetime.datetime(*x)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ValueError:年份超出范围
>>> datetime.datetime(*x)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: year is out of range