Python 使用时间、日期、时间增量工作

Python 使用时间、日期、时间增量工作,python,datetime,numpy,scipy,Python,Datetime,Numpy,Scipy,我有一个问题,我的工作时间和时间的差异很多。到目前为止,我已经用很多if语句解决了这个问题,但是这些语句很容易出错。在寻找更好的解决方案的过程中,在不重新发明轮子的情况下,我遇到了时间、日期和时间差。但这些对我来说似乎太死板了,所以我正在寻找如何使用python内置函数解决这个问题的想法和技巧——如果可能的话。这里的问题是:将卫星数据从SWATH存储到常规网格需要大量简单的时间计算。如果我有一个日期整数:200702100700,我想从这样一个时间格式中加减小时和分钟,这样date-18会给我一

我有一个问题,我的工作时间和时间的差异很多。到目前为止,我已经用很多if语句解决了这个问题,但是这些语句很容易出错。在寻找更好的解决方案的过程中,在不重新发明轮子的情况下,我遇到了时间、日期和时间差。但这些对我来说似乎太死板了,所以我正在寻找如何使用python内置函数解决这个问题的想法和技巧——如果可能的话。这里的问题是:将卫星数据从SWATH存储到常规网格需要大量简单的时间计算。如果我有一个日期整数:200702100700,我想从这样一个时间格式中加减小时和分钟,这样date-18会给我一个新的日期,考虑闰年,可以前后交叉、年、月、日。以下是我对python的datetime包的理解:

from datetime import timedelta, date, time
t1 = date(2007,01,01); t = time(12,0); t2 = datetime.combine(t1,t)
t3 = timedelta(hours=18); t4 = t2 - t3; t5 = t2 + t3
print t4
>>>datetime.timedelta(2006, 23401, 3001)

这一次对于将进行数千次计算的脚本来说不是很有用。我的问题是t4没有年、月或日对象,2006年似乎被视为小时。这一切都很令人困惑。在python/numpy/scipy中这可能吗?如果是这样,有人能给我一个提示吗?

您想使用的是datetime对象,而不是date对象:

from datetime import datetime, timedelta
t1 = datetime(2007, 01, 01)
print t1 - timedelta(days=18)
>>>datetime.datetime(2006, 12, 14, 0, 0)
print t1 - timedelta(hours=18)
>>>datetime.datetime(2006, 12, 31, 6, 0)
这将工作小时,分钟,秒以及

from datetime import datetime, timedelta, date, time
t2 = datetime(2007, 1, 1, 12, 0, 0); 
t3 = timedelta(hours=18); t4 = t2 - t3; t5 = t2 + t3
print "YEAR", t4.year
print "MONTH", t4.month
print "DAY", t4.day
print "HOUR", t4.hour
print "MINUTE", t4.minute
运行那个

[Mike_Pennington ~]$ python foo.py 
YEAR 2006
MONTH 12
DAY 31
HOUR 18
MINUTE 0
[Mike_Pennington ~]$

Gerrat做对了,使用datetime对象

您可以完全创建datetime对象,而无需单独创建日期和时间(或使用
datetime.strtime()

错误警报您的代码和一些发布的响应将注入一个难以看到的错误

// this works
datetime(2007,01,01,12)
// this breaks
datetime(2007,01,09,12)

在python中,在“09”中键入“0”将使其成为八进制数(“09”无效)。在代码中使用日期时,请避免前导零。

。在我自己的代码中,我通常不会在任何数字前面加上“0”,但在这里我并没有真正考虑后果。这一点很好!我会确保避免那样做。通常,这种填充的主要原因是搜索文件字符串或创建这样的字符串。我的文件就是这样。