私の目的は、電子メールで使用される -0700 のようなタイム ゾーン文字列を出力することです。具体的には、夏時間を含めた正確なタイム ゾーンを反映させたいと考えています。つまり、カリフォルニアでは夏は -0700、冬はカリフォルニアで -0800、中国では常に +0800 (夏時間なし) になります。
次の 2 つの理由から難しいと思います。
- Python の整数除算は、C99 や通常の C/C++ 実装とは異なり、常にゼロではなく下限に向かって丸められます。(これは、-xx30 のようなタイム ゾーンを含む計算に関係します)。
- struct_time.tm_isdst と time.daylight は、夏時間が有効かどうかを反映しません。
私は次のようなコードになりました。予想よりも長いです (特に Python の場合!):
import math
import time
def my_divide(dividend, divisor):
if dividend < 0:
if divisor < 0:
diff_sign = False
else:
diff_sign = True
else:
if divisor >= 0:
diff_sign = False
else:
diff_sign = True
if diff_sign:
return (int(math.ceil(1.0 * dividend / divisor)), dividend % -divisor)
else:
return (int(math.floor(1.0 * dividend / divisor)), dividend % divisor)
def my_timezone():
gt = time.gmtime()
lt = time.localtime()
lt_write = list(lt)
lt_write[8] = 0 # is_dst
lt = time.struct_time(lt_write)
seconds = time.mktime(lt) - time.mktime(gt)
(hours, minutes) = my_divide(seconds, 3600)
minutes = abs(minutes) // 60
return '%(hours)+03d%(minutes)02d' % {'hours': hours, 'minutes': minutes}
より良い実装を持っている人はいますか?