3

時間と時差のある仕事が多いという問題があります。これまでのところ、多くの if ステートメントを使用してこれを解決してきましたが、これらはエラーが発生しやすいものです。より良い解決策を探し、一からやり直すことなく、time、date、および timedelta に出会いました。しかし、これらは私には柔軟性がないように思われるので、可能であれば、python の組み込み関数を使用してこの問題を解決する方法についてのアイデアやヒントを探しています。ここに問題があります。スワスから通常のグリッドへの衛星データのビニングには、多くの単純な時間計算が含まれます。日付整数がある場合: 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で可能ですか? もしそうなら、誰かが私にヒントを与えることができますか?

4

3 に答える 3

6

Gerrat は正しく、datetime オブジェクトを使用します。

日付と時刻を別々に (または を使用して) 作成しなくても、datetime オブジェクトを完全に作成できますdatetime.strptime()

BUG ALERTあなたのコードと投稿された応答の一部は、見つけにくいバグを挿入します。

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

Python では、コードで日付を使用する場合、「09」に「0」を入力すると 8 進数になります (「09」は無効です)。先頭のゼロは避けてください。

于 2012-05-15T20:57:45.850 に答える
3
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 ~]$
于 2012-05-15T20:44:02.690 に答える
2

使用したいのは、日付オブジェクトではなく、日時オブジェクトです。

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)

これは、時間、分、秒でも機能します。

于 2012-05-15T20:43:26.823 に答える