*ããããŠããã§ãå転ããŸãïŒã-ã¬ãªã¬ãªã»ã¬ãªã¬ã€ãèšã£ããã£ãããã¬ãŒãºã æ®å¿µãªããããã®ããŒããŒã·ã§ã³ã¯ãã¿ã€ã ãŸãŒã³ã«é¢ããããããã¹ãŠã®ããã°ããããåé¡ã«ã€ãªãããŸãã
ãã®èšäºãšã¬ãªã¬ãªã®å ±éç¹ã¯äœã§ããïŒ ã¯ããäžè¬çã«ã¯äœããããŸããã ç§ãã¡ã®äžçãå®å®ã®äžå¿ã§ãã£ããšããŠããã¿ã€ã ãŸãŒã³ã«å¯ŸåŠããå¿ èŠãããã®ã§ã¯ãªãããšå¿é ããŠããŸãã ã¿ã€ãã«ã¯ç§ã®èŠèœãšãã§ãããšèŠãªããŸãããä¿®æ£ã¯ã§ããŸããïŒã§ããŸããïŒã
ã¿ã€ã ãŸãŒã³ãšã¯äœã§ããïŒ
ããªãã®ã¿ã€ã ãŸãŒã³ã¯äœã§ããïŒ ãUTC + 3ããšçããå Žå-ããã¯çŸæç¹ã§ã®ã¿æ£ããçãã«ãªããŸãããäžè¬çã«ãã®èšè¿°ã¯ééã£ãŠããŸãã ã¿ã€ã ãŸãŒã³ã®ããŒã¿ããŒã¹ãèŠããšãããšãã°ããã«ãªã³ãšãŠã£ãŒã³ã®ãªãã»ãããUTC + 1ãã«ãããããããã¿ã€ã ãŸãŒã³ãç°ãªãããšãããããŸãïŒããšãŒããã/ãã«ãªã³ããšããšãŒããã/ãŠã£ãŒã³ãïŒã ãªããã çç±ã¯ã圌ããæŽå²ã®ç°ãªãææã«ç°ãªãå€æéïŒDSTïŒãæã£ãŠããããã§ãã ä»æ¥ããããã®2ã€ã®åœãšãããã®2ã€ã®éœåžãåãDSTèŠåãæã£ãŠãããšããŠãã100幎åã¯ããã§ã¯ãããŸããã§ããã ããšãã°ããªãŒã¹ããªã¢ãšãã€ãã§ã¯ç°ãªãæé垯ã«å€æéã¯ãããŸããã§ããã1920幎以éã®ãªãŒã¹ããªã¢ãš1918幎以éã®ãã€ãã§ã¯ãäž¡åœã¯åãDSTã«ãŒã«ã䜿çšããŠããŸããïŒé©ãããšã§ã¯ãããŸããïŒçµãããåã³åæããªããªããŸãã ãã€ãã¯1949幎ã«å€æéãåãæ¶ããŠ1979幎ã«åã³å°å ¥ãããªãŒã¹ããªã¢ã¯1948幎ã«å€æéãåãæ¶ããŠ1980幎ã«åã³å°å ¥ããŸãããææªã®äºæ ã¯ãåãå€æéã«ãåæããªãã£ãããšã§ãããããŠãããã¯äžçäžã§èµ·ãã£ãŠããŸãã ã³ã³ãã¥ãŒã¿ãŒã³ã³ãã¥ãŒãã£ã³ã°ã®å Žåãå€æéãžã®ç§»è¡ã¯å€§ããªåé¡ã§ãããªããªããæéã¯é£ç¶çãªéåã«ä¹ã£ãŠãããšæ³å®ããŠããããã§ãã å€æéã§ã¯ãæ¯å¹Ž2åç¹°ãè¿ãããæéããããŸãã ãã°ã«æžã蟌ããšãã«ããŒã«ã«æéãæå®ãããšããœãŒãäžã«è¡ã®é åºã«éåããå¯èœæ§ããããŸãã
pytzããã¥ã¡ã³ãããã®åŒçšïŒ
ãã®ãããããšãã°ã2002幎ã®ç±³åœ/æ±éšã®ã¿ã€ã ãŸãŒã³ã§ã¯ãDSTã®æå¹æéã®çµäºæã10æ27æ¥ã01ïŒ30ã®æéã¯2åæ¥ãŸãããã4æ7æ¥ã®DSTã¢ã¯ã·ã§ã³ã®éå§æã¯02:30ã®æéã§ã¯ãããŸããã§ããã 02:00ã«æèšã1æéé²ããããŸããã
ãã ããã¿ã€ã ãŸãŒã³ã«ã¯å€æéã®èŠåã ããä¿åãããããã§ã¯ãããŸããã äžéšã®åœã§ã¯ãDSTãå€æŽããã«ã¿ã€ã ãŸãŒã³ãå€æŽããå ŽåããããŸãã ãã®ãããããšãã°ã1915幎ã«ã¯ã«ã·ã£ã¯ã¯äžå€®ãšãŒãããã®æéã«ãªããŸããã ãã®çµæã1915幎8æ5æ¥ã®åå0æã«ãæèšã¯24ååã«åãæ¿ããããŸããïŒå€æéã¯ã¯ã«ã·ã£ã¯ã§åäœããŸãïŒã
äžè¬ã«ãã¿ã€ã ãŸãŒã³ã§ã¯ããã«å€ãã®åé¡ãçºçããŸãã åå0æãšæ¥ã®åºæå»ã®åæã«ãããæ¥äžã®ã¿ã€ã ãŸãŒã³ãç°ãªãåœãå°ãªããšã1ã€ãããŸãã
åžžèã¯ã©ãã§ããïŒ
åžžèããããåå®äžçæïŒUTCïŒãšåŒã°ããŸãã UTCã¯ãå€æéã®ãªãã¿ã€ã ãŸãŒã³ã§ãããéå»ã®å€æŽã¯ãããŸããã ãã ããå°çã¯å転ãžãªã€ãã§ãããäžçã«ã¯å¶åŸ¡ã§ããªããã®ããããããä¿®æ£ç§ïŒãããç§ïŒã®åé¡ããããŸãã UTCãä¿®æ£ç§ãèæ ®ãããïŒäžèŠåã§ãããããèšç®æã«èæ ®ããã®ãé£ããïŒãããã§ãªããïŒåã¿ã€ã ãŸãŒã³ã«ã¯UTCãšã®å·®ãæ°ç§ãããŸãïŒã¯ãç§ãç¥ãéãããŸã 決å®ãããŠããŸãããããã«ãããããããçŸåšãUTCã¯æãå®å šãªãªãã·ã§ã³ã§ãã UTCãããä»»æã®ã¿ã€ã ãŸãŒã³ã®æå»ãããŒã«ã«æå»ã«å€æã§ããŸãã äžèšã®éå€æã¯äžå¯èœã§ãã
ã ãããããã«ããªãã倱æãããªãã ãããšãã倧ãŸããªçµéšåããããŸãïŒ
åžžã«UTCã§æéããããŠä¿åããŠäœæ¥ããŸãã å ã®ããŒã¿ãä¿æããå¿ èŠãããå Žåã¯ãåå¥ã«æžã蟌ã¿ãŸãã çŸå°æéãšã¿ã€ã ãŸãŒã³ãä¿åããªãã§ãã ããïŒ
åé¡ã¯äœã§ããïŒ
äžè¬ã«ããã®èšäºã¯çµäºããŠããã¯ãã§ãã ããããæ®å¿µãªããšã«ãPythonã§ããã°ã©ã ãäœæããéã«çæãã¹ãç¹ãããã€ããããŸãã ããã¯ãèšèªã®å®çšåã«ã€ããŠèª°ãèããªãã£ãå€ä»£ã®å»ºç¯ãœãªã¥ãŒã·ã§ã³ã®éºç£ã§ãã åæ©ã¯éèŠã§ããããåžžèã¯éèŠã§ã¯ãããŸããã§ãããããæŽããæ¥ãPythonæšæºã©ã€ãã©ãªã®datetimeã¢ãžã¥ãŒã«ã®ã¢ãŒããã¯ãã£ã«ã€ããŠæ¬¡ã®æ±ºå®ãè¡ãããŸããã
- ã¿ã€ã ãŸãŒã³ã¯é »ç¹ã«å€æŽããããããdatetimeã¢ãžã¥ãŒã«ã«ã¯ã¿ã€ã ãŸãŒã³æ å ±ãæ ŒçŽããªãã§ãã ããã
- äžæ¹ãdatetimeã¢ãžã¥ãŒã«ã¯ã¿ã€ã ãŸãŒã³æ å ±ïŒtzinfoïŒãè¿œå ããæ©èœãæäŸããå¿ èŠããããŸãã
- 以äžã®ãªããžã§ã¯ããdatetimeã¢ãžã¥ãŒã«ã«å®è£ ããå¿ èŠããããŸãïŒdateãtimeãdate + timeãtimedeltaã
æ®å¿µãªãããäœããããããã£ãã äž»ãªåé¡ã¯ãã¿ã€ã ãŸãŒã³æ å ±ïŒtzinfoïŒãè¿œå ãããæ¥æãªããžã§ã¯ããã¿ã€ã ãŸãŒã³ãªãã§æ¥æãªããžã§ã¯ããšå¯Ÿè©±ããªãããšã§ãïŒ
>>> import pytz, datetime >>> a = datetime.datetime.utcnow() >>> b = datetime.datetime.utcnow().replace(tzinfo=pytz.utc) >>> a < b Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can't compare offset-naive and offset-aware datetimes
æ¥æãªããžã§ã¯ãã«ã¿ã€ã ãŸãŒã³æ å ±ãè¿œå ããå¿ èŠãããã²ã©ãAPIã«ç®ãã€ã¶ããšããŸã åé¡ããããŸãã Pythonã§æ¥æãªããžã§ã¯ãã䜿çšããå Žåãé ããæ©ãããããã°ã©ã ã®ãã¹ãŠã®å Žæã§tzinfoãè¿œå ãŸãã¯åé€ããå¿ èŠããããŸãã
ãã1ã€ã®åé¡ã¯ãPythonã§çŸåšæå»ã䜿çšããŠdatetimeãªããžã§ã¯ããäœæãã2ã€ã®æ¹æ³ãããããšã§ãã
>>> datetime.datetime.utcnow() datetime.datetime(2011, 7, 15, 8, 30, 55, 375010) >>> datetime.datetime.now() datetime.datetime(2011, 7, 15, 10, 30, 57, 70767)
äžæ¹ã¯UTCã§æå»ãè¿ããããäžæ¹ã¯ããŒã«ã«æå»ãè¿ããŸãã ãã ããdatetimeãªããžã§ã¯ãã¯ãããŒã«ã«æéããæããŸããïŒå°ãªããšãããŒãžã§ã³3.3ã®PythonãŸã§ã¯ã¿ã€ã ãŸãŒã³æ å ±ããªãããïŒããããã®ãªããžã§ã¯ãã®ã©ããUTCã§æéãä¿åããŠããããç¥ãæ¹æ³ã¯ãããŸããã
UNIXã¿ã€ã ã¹ã¿ã³ããdatetimeãªããžã§ã¯ãã«å€æããå Žåãdatetime.datetime.utcfromtimestampã¡ãœããã䜿çšããå Žåã泚æãå¿ èŠã§ããããã¯ãããŒã«ã«æéã§ã¿ã€ã ã¹ã¿ã³ããååŸããããã§ãã
æ¥æã©ã€ãã©ãªã¯ãtzinfoãè¿œå ããŠããŸã£ãã圹ã«ç«ããªãæ¥æãªããžã§ã¯ããæäŸããŸãã ãã®ããã«ã¯ãæ¥ä»ãç¥ãå¿ èŠããããããæéãªããžã§ã¯ããå¥ã®ã¿ã€ã ãŸãŒã³ã«è»¢éããããšã¯ã§ããŸããã æ¥ä»ãªããžã§ã¯ãã¯éåžžãããŒã«ã«ã¿ã€ã ãŸãŒã³ã§ã®ã¿æå³ãæã¡ãŸããä»æ¥ã®ç§ã«ãšã£ãŠã¯æšââæ¥ã§ãææ¥ã§ãããããã§ãããã°ãããã¿ã€ã ãŸãŒã³ã®äžçã«æè¬ããŸãã
ããã§ã¯ãå°é家ã®æšå¥šäºé ã¯äœã§ããïŒ
ä»ãç§ãã¡ã¯èª°ã責任ãããã®ãââãç¥ã£ãŠããŸãã ããããäœããã¹ããïŒ éå»ã®éå»ã®æ¥ä»ãæ±ãå Žåã«ã®ã¿çŸããçè«äžã®åé¡ãç¡èŠããå Žåãããã€ãã®æšå¥šäºé ããããŸãã éå»ã®æ¥ä»ãåŠçããå¿ èŠãããå Žåã¯ã代æ¿ã¢ãžã¥ãŒã«mxDateTimeããããŸããããã¯åççã«èšèšãããŠãããããŸããŸãªã«ã¬ã³ããŒïŒã°ã¬ãŽãªãªæŠããã³ãŠãªãŠã¹æŠïŒããµããŒãããŸããããã°ã©ã å ã§UTCã䜿çšãã
çŸåšã®æå»ãååŸããå¿ èŠãããå Žåã¯ãåžžã«datetime.datetime.utcnowïŒïŒã䜿çšããŸãã ãŠãŒã¶ãŒããçŸå°æéãååŸããå Žåã¯ãåžžã«ããã«UTCã«å€æããŸãã æ確ãªå€æãè¡ãããšãäžå¯èœãªå Žåãããã«ã€ããŠãŠãŒã¶ãŒã«éç¥ããç²ç®çã«æéãæšæž¬ããããšããªãã§ãã ããã ãµããŒã¿ã€ã ãžã®ç§»è¡äžããã³åŸ©åž°äžã«ãiPhoneãäœåºŠãæå»ãæ£ããèšå®ã§ããŸããã§ããã ã¯ããã¯ãå€æããå¿ èŠãããããããã€ãããè¡ãããç¥ã£ãŠããŸãã
ã¿ã€ã ãŸãŒã³ã§æéã䜿çšããªãã§ãã ãã
åžžã«ã¿ã€ã ãŸãŒã³æ å ±ãdatetimeãªããžã§ã¯ãã«è¿œå ããã®ã¯è¯ãèãã®ããã«æãããããããŸããããå®éã«ã¯ãããè¡ããªãæ¹ãã¯ããã«è¯ãèãã§ãã è¯ã解決çã¯ãtzinfoã䜿çšãããUTCã§æéãšãšãã«datetimeãªããžã§ã¯ãã䜿çšããããšã§ãã Python 3ã§ãã€ããšUnicodeãæ··åšãããããšãã§ããªãããã«ãã¿ã€ã ãŸãŒã³ãšã¿ã€ã ãŸãŒã³ãæ¯èŒããããšã¯ã§ããªããšããäºå®ãèæ ®ããŠãã ããããã®APIã®æ¬ é¥ãç¬èªã®ç®çã«äœ¿çšããŠãã ããã
- ããã°ã©ã å ã§ã¯ãåžžã«UTCæéã®tzinfoãªãã®datetimeãªããžã§ã¯ãã䜿çšããŠãã ããã
- ãŠãŒã¶ãŒãšããåããããšãã¯ãåžžã«ãŠãŒã¶ãŒã®ããŒã«ã«UTCæéãå€æãããã®éãåæ§ã§ãã
datetimeãªããžã§ã¯ãã«tzinfoãè¿œå ããå¿ èŠããªãã®ã¯ãªãã§ããïŒ ç¬¬äžã«ã倧å€æ°ã®ã©ã€ãã©ãªã¯tzinfoãNoneã§ããããšãæåŸ ããŠããããã§ãã 2ã€ç®ã¯ãæ²ãã£ãAPIã䜿çšããããšãèãããšãåžžã«tzinfoã䜿çšããã®ã¯ã²ã©ãèãã§ãã æšæºã©ã€ãã©ãªã«å®è£ ãããŠããtzinfoå€æAPIã¯ã»ãšãã©ã®å®éã®ã¿ã€ã ãŸãŒã³ã§åäœããã»ã©æè»ã§ã¯ãªããããpytzã©ã€ãã©ãªã«ã¯ã¿ã€ã ãŸãŒã³ãå€æããããã®ä»£æ¿é¢æ°ããããŸãã tzinfoãªããžã§ã¯ãã䜿çšããªãå Žåãå°æ¥çã«ãã¹ãŠãããè¯ããªãå¯èœæ§ããããŸãã
ã¿ã€ã ãŸãŒã³ã§æéã䜿çšããªããã1ã€ã®çç±ã¯ãtzinfoãªããžã§ã¯ããéåžžã«å ·äœçã§ããããã®å®è£ ã«å€§ããäŸåããŠããããšã§ãã HTTPãªã©ãä»ããŠãã¿ã€ã ãŸãŒã³æ å ±ãïŒUTCã¿ã€ã ãŸãŒã³ã®äŸå€ãé€ããŠïŒä»ã®èšèªã«éä¿¡ããæšæºçãªæ¹æ³ã¯ãããŸããã ããã«ãã¿ã€ã ãŸãŒã³æ å ±ãå«ãdatetimeãªããžã§ã¯ãã¯ãpickleã¢ãžã¥ãŒã«ã䜿çšããŠã·ãªã¢ã«åãããšéåžžã«å€§ãããªãããã·ãªã¢ã«åããããšããã§ããŸããïŒããã¯tzinfoãªããžã§ã¯ãã®å®è£ ã«äŸåããŸãïŒã
æžåŒèšå®ã®ããã®å€æ
ãŠãŒã¶ãŒã®ã¿ã€ã ãŸãŒã³ã§æå»ã衚瀺ããå¿ èŠãããå Žåã¯ãUTCã®æå»ãæã€datetimeãªããžã§ã¯ããååŸããUTCã¿ã€ã ãŸãŒã³ãè¿œå ããæå»ããŠãŒã¶ãŒã®ããŒã«ã«æå»ã«å€æããŠãã©ãŒãããããŸãã tzinfoã¡ãœããã䜿çšããã¿ã€ã ãŸãŒã³å€æã䜿çšããªãã§ãã ãããæ£ããæ©èœããªããããpytzã䜿çšããŠãã ããã 次ã«ããã©ãŒãããçšã«äœæããçµæã®datetimeãªããžã§ã¯ãããã¿ã€ã ãŸãŒã³ãªãã»ãããç Žæ£ããããšã«ãããæéããåçŽãã«èšå®ãããã以éã幞ãã«çãç¶ããŸãã
Dreadatourã翻蚳ããããã¹ãã¯ïŒ usernameïŒ ãèªã¿ãŸããã
æåŸãŸã§èªãã 人ã®ããã®ç¿»èš³è ããã®ããŒãã¹ïŒ
ã¿ã€ã ãŸãŒã³ã«é¢ãããã ã¹ã³ããã®ã·ãã¯ãªãããªïŒ
ãããŠã 次ã®èšäºã§ã¯ãèè ãééã£ãŠããå Žæã圌ãééã£ãŠããçç±ããããŠçµå±ã®ãšããã©ã®ããã«æ£ããè¡ãããªããã°ãªããªãããæžããŸãã