2

次のコードを使用して、システムの日付 (時刻ではない) を設定しようとしています。現在の時刻を新しい日付に設定したい。以下はサンプルコードで、変更後に時刻が正しくないことがわかりました。

day = 20
month = 3
year = 2010

timetuple = time.localtime()
print timetuple
print timetuple[3], timetuple[4], timetuple[5]
win32api.SetSystemTime(year, month, timetuple[6]+1, 
    day, timetuple[3], timetuple[4], timetuple[5], 1)
4

1 に答える 1

5

localtimeタイムスタンプからシステム時刻を設定しています。後者はローカル タイムゾーンに合わせて調整されSetSystemTime ますが、UTC タイムゾーンを使用する必要があります

time.gmtime()代わりに使用してください:

tt = time.gmttime()
win32api.SetSystemTime(year, month, 0, day, 
    tt.tm_hour, tt.tt_min, tt.tt_sec, 0)

また、現在夏時間 (DST) にいるかどうかに対処する必要もありませんが、3 月は冬時間になります。

datetime.datetime.utcnow()または、呼び出しを使用して、ボーナスとしてミリ秒パラメーターを取得することもできます。

import datetime
tt = datetime.datetime.utcnow().time()
win32api.SetSystemTime(year, month, 0, day,
    tt.hour, tt.minute, tt.second, tt.microsecond//1000)

どちらの例でも、平日の項目を 0 のままにしてあることに注意してください。を呼び出すときは無視されSetSystemTimeます。無視されなかった場合、コード例の値が間違っていました。Python の値の範囲は月曜日から日曜日まで 0 から 6 ですが、Win32 API は日曜日から土曜日まで1 から 7 を必要とします。2 を追加し、モジュロ 7 を使用する必要があります。

win32_systemtime_weekday = (python_weekday + 2) % 7)
于 2012-08-24T14:03:24.177 に答える