Created
May 14, 2012 18:43
-
-
Save foota/2695616 to your computer and use it in GitHub Desktop.
Standard time
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
# -*- coding: utf-8 -*- | |
"""世界の標準時間を相互に変換""" | |
import sys, os, datetime | |
TIMEZONE_TABLE = { | |
"NZDT" : ["+13:00", u"ニュージーランド夏時間"], | |
"IDLE": ["+12:00", u"国際日付変更線の東側"], | |
"NZST": ["+12:00", u"ニュージーランド標準時間"], | |
"NZT": ["+12:00", u"ニュージーランド時間"], | |
"AESST": ["+11:00", u"オーストラリア東部標準夏時間"], | |
"ACSST": ["+10:30", u"オーストラリア中部標準夏時間"], | |
"CADT": ["+10:30", u"オーストラリア中部夏時間"], | |
"SADT": ["+10:30", u"オーストラリア南部夏時間"], | |
"AEST": ["+10:00", u"オーストラリア東部標準時間"], | |
"EAST": ["+10:00", u"オーストラリア東部標準時間"], | |
"GST": ["+10:00", u"グアム標準時間"], | |
"LIGT": ["+10:00", u"オーストラリア、メルボルン"], | |
"SAST": ["+09:30", u"オーストラリア南部標準時間"], | |
"CAST": ["+09:30", u"オーストラリア中部標準時間"], | |
"AWSST": ["+09:00", u"オーストラリア西部標準夏時間"], | |
"JST": ["+09:00", u"日本標準時間"], | |
"KST": ["+09:00", u"韓国標準時間"], | |
"MHT": ["+09:00", u"マーシャル群島、クワジュリン時間"], | |
"WDT": ["+09:00", u"オーストラリア西部夏時間"], | |
"MT": ["+08:30", u"モルッカ諸島時間"], | |
"AWST": ["+08:00", u"オーストラリア西部標準時間"], | |
"CCT": ["+08:00", u"中国湾岸時間"], | |
"WADT": ["+08:00", u"オーストラリア西部夏時間"], | |
"WST": ["+08:00", u"オーストラリア西部標準時間"], | |
"JT": ["+07:30", u"ジャワ島時間"], | |
"ALMST": ["+07:00", u"アルマトイ夏時間"], | |
"WAST": ["+07:00", u"オーストラリア西部標準時間"], | |
"CXT": ["+07:00", u"クリスマス島時間"], | |
"MMT": ["+06:30", u"ミャンマー時間"], | |
"ALMT": ["+06:00", u"アルマトイ時間"], | |
"MAWT": ["+06:00", u"南極大陸時間"], | |
"IOT": ["+05:00", u"インドチャゴス時間"], | |
"MVT": ["+05:00", u"モルディブ島時間"], | |
"TFT": ["+05:00", u"ケルゲレン諸島時間"], | |
"AFT": ["+04:30", u"アフガニスタン時間"], | |
"EAST": ["+04:00", u"マダガスカル、アンタナナリボ"], | |
"MUT": ["+04:00", u"モーリシャス島時間"], | |
"RET": ["+04:00", u"レユニオン島時間"], | |
"SCT": ["+04:00", u"マーヘ島時間"], | |
"IRT": ["+03:30", u"イラン時間"], | |
"IT": ["+03:30", u"イラン時間"], | |
"EAT": ["+03:00", u"アンタナナリボ、コモロ時間"], | |
"BT": ["+03:00", u"バクダッド時間"], | |
"EETDST": ["+03:00", u"東ヨーロッパ夏時間"], | |
"EEST": ["+03:00", u"東ヨーロッパ夏時間"], | |
"HMT": ["+03:00", u"ギリシャ、ヘラ地中海時間"], | |
"BDST": ["+02:00", u"英国二重夏時間"], | |
"CEST": ["+02:00", u"中央ヨーロッパ夏時間"], | |
"CETDST": ["+02:00", u"中央ヨーロッパ夏時間"], | |
"EET": ["+02:00", u"東ヨーロッパ時間"], | |
"FWT": ["+02:00", u"フランス冬時間"], | |
"IST": ["+02:00", u"イスラエル標準時間"], | |
"MEST": ["+02:00", u"中央ヨーロッパ夏時間"], | |
"METDST": ["+02:00", u"中央ヨーロッパ夏時間"], | |
"SST": ["+02:00", u"スウェーデン夏時間"], | |
"BST": ["+01:00", u"英国夏時間"], | |
"CET": ["+01:00", u"中央ヨーロッパ時間"], | |
"DNT": ["+01:00", u"デンマーク標準時間"], | |
"FST": ["+01:00", u"フランス夏時間"], | |
"MET": ["+01:00", u"中央ヨーロッパ時間"], | |
"MEWT": ["+01:00", u"中央ヨーロッパ冬時間"], | |
"MEZ": ["+01:00", u"中央ヨーロッパ地域時間"], | |
"NOR": ["+01:00", u"ノルウェー標準時間"], | |
"SET": ["+01:00", u"セイシェル時間"], | |
"SWT": ["+01:00", u"スウェーデン冬時間"], | |
"WETDST": ["+01:00", u"西ヨーロッパ夏時間"], | |
"WEST": ["+01:00", u"西ヨーロッパ夏時間"], | |
"GMT": ["00:00", u"グリニッジ標準時間"], | |
"UT": ["00:00", u"万国共通時間"], | |
"UTC": ["00:00", u"協定世界時間"], | |
"Z": ["00:00", u"協定世界時間"], | |
"ZULU": ["00:00", u"協定世界時間"], | |
"WET": ["00:00", u"西ヨーロッパ時間"], | |
"WAT": ["-01:00", u"西アフリカ時間"], | |
"FNST": ["-01:00", u"フェルナンド・デ・ノローニャ夏時間"], | |
"FNT": ["-02:00", u"フェルナンド・デ・ノローニャ時間"], | |
"BRST": ["-02:00", u"ブラジニア夏時間"], | |
"NDT": ["-02:30", u"ニューファンドランド夏時間"], | |
"ADT": ["-03:00", u"大西洋夏時間"], | |
"BRT": ["-03:00", u"ブラジリア時間"], | |
"NFT": ["-03:30", u"ニューファンドランド標準時間"], | |
"NST": ["-03:30", u"ニューファンドランド標準時間"], | |
"AST": ["-04:00", u"大西洋標準時間"], | |
"ACST": ["-04:00", u"大西洋/ポルトアクリ夏時間"], | |
"EDT": ["-04:00", u"米国東部夏時間"], | |
"ACT": ["-05:00", u"大西洋/ポルトアクリ標準時間"], | |
"CDT": ["-05:00", u"米国中部夏時間"], | |
"EST": ["-05:00", u"米国東部標準時間"], | |
"CST": ["-06:00", u"米国中部標準時間"], | |
"MDT": ["-06:00", u"米国山岳部夏時間"], | |
"MST": ["-07:00", u"米国山岳部標準時間"], | |
"PDT": ["-07:00", u"米国太平洋夏時間"], | |
"AKDT": ["-08:00", u"アラスカ夏時間"], | |
"PST": ["-08:00", u"米国太平洋標準時間"], | |
"YDT": ["-08:00", u"ユーコン夏時間"], | |
"AKST": ["-09:00", u"アラスカ標準時間"], | |
"HDT": ["-09:00", u"ハワイ/アラスカ夏時間"], | |
"YST": ["-09:00", u"ユーコン標準時間"], | |
"MART": ["-09:30", u"マルケサス諸島時間"], | |
"AHST": ["-10:00", u"ハワイ/アラスカ標準時間"], | |
"HST": ["-10:00", u"ハワイ標準時間"], | |
"CAT": ["-10:00", u"アラスカ中央時間"], | |
"NT": ["-11:00", u"ノーム時間"], | |
"IDLW": ["-12:00", u"国際日付変更線の西側"]} | |
def standard_time(DATE, TIME, fZone, tZone): | |
if fZone not in TIMEZONE_TABLE.keys(): | |
print >>sys.stderr, u"変換元の標準時間略名が認識できません:", fZone | |
sys.exit() | |
if tZone not in TIMEZONE_TABLE.keys(): | |
print >>sys.stderr, u"変換先の標準時間略名が認識できません:", tZone | |
sys.exit() | |
h, m = map(int, TIMEZONE_TABLE[fZone][0].split(":")) | |
m *= -1 if TIMEZONE_TABLE[fZone][0].strip()[0] == "-" else 1 | |
fST = datetime.timedelta(hours=h, minutes=m) | |
h, m = map(int, TIMEZONE_TABLE[tZone][0].split(":")) | |
m *= -1 if TIMEZONE_TABLE[fZone][0].strip()[0] == "-" else 1 | |
tST = datetime.timedelta(hours=h, minutes=m) | |
try: | |
d = DATE.split("/") | |
if len(d) == 2: | |
Y = datetime.date.today().year | |
M, D = map(int, d) | |
elif len(d) == 3: | |
Y, M, D = map(int, d) | |
else: raise | |
t = TIME.split(":") | |
if len(t) == 2: | |
h, m = map(int, t) | |
s = 0 | |
elif len(t) == 3: | |
h, m, s = map(int, t) | |
else: raise | |
except: | |
print >>sys.stderr, u"日時のフォーマットが間違っています:", DATE, TIME | |
sys.exit() | |
try: | |
print u"%s(%s)" % (TIMEZONE_TABLE[fZone][1], fZone) | |
print datetime.datetime(Y, M, D, hour=h, minute=m, second=s) | |
print u"%s(%s)" % (TIMEZONE_TABLE[tZone][1], tZone) | |
print datetime.datetime(Y, M, D, hour=h, minute=m, second=s) + (tST - fST) | |
except: | |
print >>sys.stderr, u"日時に誤りがあります: %s %s %s" % (DATE, TIME, sys.exc_info()[1]) | |
sys.exit() | |
def main(args): | |
if len(args) < 4: | |
print >>sys.stderr, u"Usage: %s 日付 時刻 変換元の標準時間略名 [変換先の標準時間略名=JST]" % os.path.basename(args[0]) | |
print >>sys.stderr, u" 日付: [年/]月/日 (例: 2009/4/3, 11/19)" | |
print >>sys.stderr, u" 時刻: 時:分[:秒] (例: 19:50:23, 9:20)" | |
print >>sys.stderr | |
print >>sys.stderr, u" 使用例: " | |
print >>sys.stderr, u" 米国東部夏時間(EDT)4月30日の午後6時を日本標準時(JST)に変換する場合" | |
print >>sys.stderr, u" %s 4/30 18:00 EDT" % os.path.basename(args[0]) | |
print >>sys.stderr | |
print >>sys.stderr, u" 米国東部夏時間(EDT)4月30日の午後6時を米国太平洋標準時間(PST)に変換する場合" | |
print >>sys.stderr, u" %s 4/30 18:00 EDT PST" % os.path.basename(args[0]) | |
print >>sys.stderr | |
print >>sys.stderr, u" 日本標準時(JST)4月30日の午後6時を米国東部夏時間(EDT)に変換する場合" | |
print >>sys.stderr, u" %s 4/30 18:00 JST EDT" % os.path.basename(args[0]) | |
sys.exit() | |
DATE = args[1].replace("-", "/").replace(".", "/") | |
TIME = args[2] | |
fZone = args[3].upper() | |
if len(args) == 4: tZone = "JST" | |
else: tZone = args[4].upper() | |
standard_time(DATE, TIME, fZone, tZone) | |
if __name__ == "__main__": main(sys.argv) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
http://handasse.blogspot.com/2009/04/python.html