1

あるdatetime.timeが別のdatetime.timeの後にどれくらいの長さかを調べる方法が必要です非常に簡単ですが...問題は、時間の値が24時間であるため、ある値を別の値から否定するほど簡単ではありません. 代わりに、time_a の後に time_b がどれくらいあるかを計算する必要があります。時間を前方にカウントし、真夜中に時間がループする場合、つまり

time_a = 09:00
time_b = 04:00

ここで、time_b は time_a から 19 時間後です

def time_after_time(time_a, time_b):

    a_hour = time_a.hour
    a_minute = time_a.minute
    b_hour = time_b.hour
    b_minute = time_b.minute

    out_hour = b_hour - a_hour
    out_minute = b_minute - a_minute

    if out_hour < 0:
        out_hour += 24

    if out_minute < 0:
        out_hour -= 1
        out_minute += 60

    return datetime.time(out_hour, out_minute)

これは私の最初の試みでしたが、誤った結果が得られました。

これを行うためのよりクリーンで正しい方法を考えられる人はいますか?

4

4 に答える 4

1

これが私の解決策です:

def time_after_time(time_a, time_b):
    time_a_min = time_a.hour * 60 + time_a.minute
    time_b_min = time_b.hour * 60 + time_b.minute
    out_min = time_b_min - time_a_min
    if out_min < 0:
        out_min += 24 * 60
    return datetime.time(out_min / 60, out_min % 60)

codepad.orgでテストできます。

于 2012-11-05T19:25:40.990 に答える
0
timedif = DATETIME_1 - DATETIME_2
print timedif

必ずdatetime.datetimetimes..を使用してください。

datetime.timeをdatetimeに変換するには

datetime.datetime.combine(datetime.datetime.now().date(),datetimeTime_obj)

09:00-10:00 = 1時間ですか、それとも25時間ですか?それでは最大24時間ですか?

import datetime

time_a = datetime.time(9,00)
time_b = datetime.time(5,0)
dte = datetime.datetime.now().date()

dt_a = datetime.datetime.combine(dte,time_a)

dt_b = datetime.datetime.combine(dte,time_b)
time_dif = dt_b - dt_a
time_dif2 = dt_a - dt_b
print "TimeDif:",time_dif,time_dif2
#output: 20:00:00 , 04:00:00
于 2012-11-05T18:15:12.147 に答える
0

私の経験では、外部ソースから 24 時間ベースのタイムスタンプを受け取った場合は常に、それを内部で絶対時間 (1970 年からの秒数など) にすぐに変換することが不可欠です。たとえばChttps:これ を行う方法については、//stackoverflow.com/a/12859648/318716を参照してください。

これを行うと、時間の単純な減算が簡単かつ有効になります。

これを行わないと、最終的にタイムスタンプが 48 時間異なるという問題が発生します。

このような変換は、たとえば履歴アーカイブ データの分析や再生を行っている場合、現在の日付/時刻に基づくべきではない場合があります

于 2012-11-05T18:33:24.080 に答える
0

2番目の答え(最初の答えで与えられた理由から、私はお勧めしません)。あなたCが持つことができます:

int time1MinusTime2Positive(int t1, int t2) { // returns dt from 0 to <24 hours
    return fmod(t1 - t2 + 100 * 24 * 60 * 60, 24 * 60 * 60);
}

int time1MinusTime2(int t1, int t2) { // returns dt between -12 and +12 hours
    const int dt = t1 - t2;
    if (dt > 24 * 60 * 60 / 2)
       return dt - 24 * 60 * 60;
    else if (dt < -24 * 60 * 60 / 2)
       return dt + 24 * 60 * 60;
    else
       return dt;
}

ここで、入力時間は午前 0 時からの秒数、1970 年からの秒数、または 1900 年からの秒数で表されますが、どちらでもかまいません。出力は、「現在」が意味するものは何でも、「現在」の真夜中を基準とした秒単位です。

于 2012-11-05T19:02:01.517 に答える