ã¿ãªããããã«ã¡ã¯ïŒ ç§ã®ååã¯ã¢ã³ãã¬ã€ã»ããŽã£ã³ãã§ããæè¿ãç§ã¯åœã®ããŸããŸãªå°åã§äœ¿çšããã人ã
ã®ä»äºãèªååããã¢ããªã±ãŒã·ã§ã³ãéçºãããããžã§ã¯ãã«åãçµãã§ããŸãã ç¹å®ã®ã¿ã€ã ãŸãŒã³ããšã«ãã¢ããªã±ãŒã·ã§ã³ã¯éå»ãšæªæ¥ã®äž¡æ¹ã§æéãæ£ããåä¿¡ãä¿åã衚瀺ããå¿
èŠããããŸã-ããšãã°ãå€åã·ããã®éå§ãèšç®ãããããæ£ãã衚瀺ããŸãïŒã·ããã®çµäºãŸã§ã®æéãã«ãŠã³ãããç§»åãã人æ°ã衚瀺ããŸãç®çå°ã«è¡ãã圌ããèŠç¯ãæºãããŠãããã©ããã倿ããŸãã

ç§ãRuby on Railsã§æžããŠããé廿°å¹Žã«ããã£ãŠãç§ã¯åæ§ã®åé¡ã«å¯ŸåŠããå¿
èŠã¯ãããŸããã§ãã-ãã以åã¯ããã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ãåãã¿ã€ã ãŸãŒã³ã§æ©èœããŠããŸããã ãããŠçªç¶ãç§ã¯å€ãã®æ±ããããããŸããŸãªãšã©ãŒããã£ããããå°æ¥ããããåé¿ããããã«æ¥ä»ãšæå»ãã©ã®ããã«æ±ãããèãåºããªããã°ãªããŸããã§ããã
ãã®çµæã仿¥ç§ã¯ããªããšå
±æãããã®ããããŸãã æéãä¿åãããããæ°æéïŒã¢ã¹ã¯ã¯ã®å Žåã¯3æéïŒã®ç¹åŸŽçãªåºããã§èª€ã£ãŠè¡šç€ºããããšããäºå®ã«å®æçã«ééããå Žåãå€éã®é²ç»ã®äžéšã¯é£æ¥ããæ¥ã«ç§»è¡ãããŠãŒã¶ãŒã®åžæã©ããã«è¡šç€ºããããæéã衚瀺ãããŸããããã®ãã¹ãŠãã©ãããããç¥ã£ãŠãã-ç«ã®äžã§æè¿ã
ããã§ãæåã§æãéèŠãªããš-ç§ãã¡ãæ¥åžžç掻ã®äžã§åããŠããæéã¯äœã§ããïŒ
éåžžã®ç掻ã§ã¯ãç§ãã¡ã¯ç§ãã¡ãäœãã§ããå Žæã§åäœãã
ããŒã«ã«ã¿ã€ã ã§åäœããŸãããã³ã³ãã¥ãŒã¿ãŒã·ã¹ãã ã§åäœããããšã¯é£ãããå±éºã§ã-æèšã®å€æŽïŒå€æéãå·äžé¢ãªã©ïŒã®ãããäžåäžã§ãããŸãã§ãïŒããã«ã€ããŠã¯åŸã§è©³ãã説æããŸãïŒã ãã®ãããäžå®ã®
æ®éçãªæéãããããŸããããã¯åäžã§æç¢ºã§ããïŒ
ãããç§ãèšäºã«é£ã³èŸŒãã§ãã¹ãŠãå°ç¡ãã«ããŸãããããã«ã€ããŠã¯èªããŸããïŒããã®å€ã®1ã€ã¯å°çäžã®ã©ãã§ãåãç¬éãåæ ããŠããŸãïŒç©çåŠãéãã«ïŒ ïŒ-åäžã®åç
§ç¹ããã®åœ¹å²ã¯UTC-åå®äžçæã«ãã£ãŠæããããŸãã ãŸããçŸå°æéãäžçæããäžçæã«å€æããããã«ã
ã¿ã€ã ãŸãŒã³ ïŒçŸä»£çšèªã§ã¯
ã¿ã€ã ãŸãŒã³ ïŒãå¿
èŠã§ãã
ããããäžè¬çã«ã¿ã€ã ãŸãŒã³ã¯äœã§ããïŒ
æåã¯UTCããã®ãªãã»ããã§ãã ã€ãŸããçŸå°æéãšUTCãšã®æå·®ã¯äœæéã§ããã ããã¯æŽæ°ã®æéæ°ã§ããå¿
èŠã¯ãªãããšã«æ³šæããŠãã ããã ãããã£ãŠãã€ã³ãããããŒã«ãã€ã©ã³ããã¥ãŒãžãŒã©ã³ããã«ãããšãªãŒã¹ãã©ãªã¢ã®äžéšãããã³ãã®ä»ã®å€ãã®äººã
ã¯ãUTCããXæé30åãŸãã¯Xæé45åã§åèªããã£ãŠç掻ããŠããŸãã ããã«ãå°çäžã®ããã€ãã®å°ç¹ã«ã¯ããã§ã«3ã€ã®æ¥ä»ããããŸããæ¥µç«¯ãªã¿ã€ã ãŸãŒã³ã®å·®ã¯26æéã§ãããããæšæ¥ã仿¥ãææ¥ã§ãã
第äºã«ããããã¯å€æéã«åãæ¿ããããã®ã«ãŒã«ã§ãã åããªãã»ããã®ã¿ã€ã ãŸãŒã³ãæã€åœã§ã¯ã倿éã«ãŸã£ããåãæ¿ãããªãåœãããã°ãäžéšã®æ°å€ã倿Žãããåœãããã°ãä»ã®å°åã®åœããããŸãã å€ã®äžéšãå¬ã®äžéšïŒã¯ããååçããããŸãïŒã äžéšã®åœïŒãã·ã¢ãå«ãïŒã¯ãããæ©ã倿éã«åãæ¿ããŸããããè³¢æã«ããã®èããæŸæ£ããŸããã ãŸããéå»ã®æ¥ä»ãšæå»ãæ£ãã衚瀺ããã«ã¯ãããããã¹ãŠãèæ
®ããå¿
èŠããããŸãã 倿éã«åãæ¿ãããšããããå€åããããšãèŠããŠããããšãéèŠã§ãïŒå¬ã¯ã¢ã¹ã¯ã¯ã§+3æéåãå€ã¯+4ã«ãªããŸããïŒã
ã³ã³ãã¥ãŒã¿ãŒã§ã¯ããã®çæ°ãæäœããããã®æ
å ±ã¯é©åãªããŒã¿ããŒã¹ã«ä¿åãããŸããæéãæäœããããã®ãã¹ãŠã®åªããã©ã€ãã©ãªã¯ãããããã¹ãŠã®æãããæ©èœãèæ
®ããããšãã§ããŸãã
Windowsã¯ç¬èªã®ããŒã¹ã䜿çšããŠããããã§ããããªãŒãã³ãœãŒã¹ã®äžçã®ã»ãŒå
šäžçã§ãäºå®äžã®æšæºã¯
tzdataãšããŠç¥ãããŠãã
IANAã¿ã€ã ãŸãŒã³ããŒã¿ããŒã¹ã§ãã Unixæä»£ã®åããã€ãŸã1970幎1æ1æ¥ããã®ãã¹ãŠã®ã¿ã€ã ãŸãŒã³ã®å±¥æŽãä¿åããŸããã©ã®ã¿ã€ã ãŸãŒã³ã衚瀺ãããã®ããæ¶ããïŒãããŠæ³šãããïŒã®ãã倿éã«åãæ¿ããããå Žæããã€ãã©ã®ããã«ããã«äœãã§ãããšããããã£ã³ã»ã«ããããšãã åã¿ã€ã ãŸãŒã³ã¯å°å/å ŽæãšããŠæå®ãããŸããããšãã°ãã¢ã¹ã¯ã¯ã®ã¿ã€ã ãŸãŒã³ã¯ãšãŒããã/ã¢ã¹ã¯ã¯ãšåŒã°ããŸãã Tzdataã¯ãGNU / LinuxãJavaãRubyïŒtzinfo gemïŒãPostgreSQLãMySQLãªã©ã§äœ¿çšãããŠããŸãã
Ruby on Rails
ActiveSupport::TimeZone
ã¯ã©ã¹ã
ActiveSupport::TimeZone
ããŠã¿ã€ã ãŸãŒã³ãåŠçããŸããããã¯ãæšæºã®Ruby on Railsããã±ãŒãžãã
ActiveSupport
ã©ã€ãã©ãªã®äžéšãšããŠæäŸãããŸãã ããã¯
tzinfo gemã®ã©ãããŒã§ããã
tzdataãžã®rubyã€ã³ã¿ãŒãã§ã€ã¹ãæäŸããŸãã æéãæäœããããã®ã¡ãœãããæäŸããRubyæšæºã©ã€ãã©ãªã®ActiveSupportã®æ¡åŒµTimeã¯ã©ã¹ã§ãç©æ¥µçã«äœ¿çšãããã¿ã€ã ãŸãŒã³ãå®å
šã«æäœããŸãã ããŠãRuby on Railsã®
ActiveSupport::TimeWithZone
ã¯ããªãã»ããä»ãã®æéã ãã§ãªããã¿ã€ã ãŸãŒã³èªäœãæ ŒçŽãããŠããŸãã ã¿ã€ã ãŸãŒã³ã®å€ãã®ã¡ãœããã¯ãæ£ç¢ºã«
ActiveSupport::TimeWithZone
ããã»ãšãã©ã®å ŽåããããæããããšãããããŸããã ããã2ã€ã®ã¯ã©ã¹ã®éãã¯
ããã¥ã¡ã³ãã«èšèŒãããŠããããã®éãã¯ç¥ã£ãŠãããšäŸ¿å©ã§ãã
ActiveSupport::TimeZone
æ¬ ç¹ã®äžã§ãã¿ã€ã ãŸãŒã³ã«ç¬èªã®ã人éãèªãããèå¥åã䜿çšããŠãããããäžäŸ¿ãªå Žåãããããããã®èå¥åã¯tzdataã§äœ¿çšã§ãããã¹ãŠã®ã¿ã€ã ãŸãŒã³ã§ã¯ãªããä¿®æ£å¯èœã§ãã
åãã¬ãŒã«ãã¯ãã§ã«ãã®ã¯ã©ã¹ã«ééããŠãããæ°ããã¢ããªã±ãŒã·ã§ã³ã®äœæåŸã«
config/application.rb
ãã¡ã€ã«ã«ã¿ã€ã ãŸãŒã³ãèšå®ããŠããŸãã
config.time_zone = 'Moscow'
ã¢ããªã±ãŒã·ã§ã³ã§ã¯ã
Time
ã¯ã©ã¹ã®
zone
ã¡ãœããã䜿çšããŠãã®ã¿ã€ã ãŸãŒã³ã«ã¢ã¯ã»ã¹ã§ããŸãã
ããã§ã
Europe/Moscow
代ããã«èå¥å
Moscow
ãŠããããšããã§ã«ããããŸãããã¿ã€ã ãŸãŒã³ãªããžã§ã¯ãã®
inspect
ã¡ãœããã®åºåãèŠããšãèå¥å
tzdataãžã®ãããã³ã°ãããããšãããããŸãã
> Time.zone => #<ActiveSupport::TimeZone:0x007f95aaf01aa8 @name="Moscow", @tzinfo=#<TZInfo::TimezoneProxy: Europe/Moscow>>
ãããã£ãŠãç§ãã¡ã«ãšã£ãŠæãè峿·±ãã¡ãœããã¯ïŒ
ActiveSupport::TimeWithZone
åã®ãã¹ãŠã®æ»ããªããžã§ã¯ã
ActiveSupport::TimeWithZone
ïŒã§ãïŒ
- æå®ãããã¿ã€ã ãŸãŒã³ã®çŸåšã®æå»ãè¿ã
now
ã¡ãœããã
Time.zone.now
parse
ã¡ãœããã¯ã Time
ã¯ã©ã¹ã®parse
ã¡ãœãããšåæ§ã«ãæååãæéãšãšãã«Time
ã¯ã©ã¹ã®ãªããžã§ã¯ãã«parse
ãŸãããåæã«ãã®ãªããžã§ã¯ãã®ã¿ã€ã ãŸãŒã³ã«ããã«å€æããŸãã UTCããã®ãªãã»ãããè¡ã«ç€ºãããŠããªãå Žåããã®ã¡ãœããã¯ããã®ã¿ã€ã ãŸãŒã³ã®çŸå°æå»ãè¡ã«ç€ºããããšåæã«æ±ºå®ããŸãã
ActiveSupport::TimeZone['Novosibirsk'].parse('2015-06-19T12:13:14')
at
ã¡ãœããã¯ããåç¥ã®ããã«åžžã«UTCã§ããUnixã¿ã€ã ã¹ã¿ã³ãïŒ1970幎1æ1æ¥ããã®ç§æ°ïŒããã®ã¿ã€ã ãŸãŒã³ã®Time
åã®ãªããžã§ã¯ãã«å€æããŸãã
Time.zone.at(1234567890)
local
ã¡ãœãããããã«ãããåã
ã®ã³ã³ããŒãã³ãïŒå¹Žãæãæ¥ãæéãªã©ïŒããé©åãªã¿ã€ã ãŸãŒã³ã®æéãããã°ã©ã ã§æ§ç¯ã§ããŸãã
ActiveSupport::TimeZone['Yakutsk'].local(2015, 6, 19, 12, 13, 14)
ActiveSupport::TimeZone
ã¯ã©ã¹ã¯ã
Time
ã¯ã©ã¹ã®ãªããžã§ã¯ãã䜿çšããæäœã§ãç©æ¥µçã«äœ¿çšãããŠãããæ¬¡ã®ãããªäŸ¿å©ãªã¡ãœãããããã€ã远å ãããŠããŸãã
éèŠïŒ ãnowããè¿ãã¡ãœããã«ã¯ã
Time.now
ãšãšãã«
Date.current
ãš
Time.now
ãšãšãã«
Date.current
ãè¿ã2ã€ã®ç°ãªãã»ããããããŸãã ãããã®éãã¯ãæåã®ãã®ïŒ
current
ïŒã¯ãã¢ããªã±ãŒã·ã§ã³ã®ã¿ã€ã ãŸãŒã³ã®æå»ãŸãã¯æ¥ä»ãã
ActiveSupport::TimeWithZone
ã¿ã€ãã®ãªããžã§ã¯ããšããŠã
Time.zone
ã¡ãœãããçŸåšè¿ãããããã®Rubyã¡ãœããã远å ããã®ãšåããã«ãã§è¿ãããšã§ãon RailsãåŸè
ã¯ãµãŒããŒãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ã¿ã€ã ãŸãŒã³ã泚æãããã³Rubyæšæºã©ã€ãã©ãªã«æ»ããŸãïŒãããããåã«
Time
ãè¿ããŸãïŒã 泚æããŠãã ãã-ããŒã«ã«ã§
Time.current
ã§ããªãå¥åŠãªãã°ããããããããªãã®ã§ãåžžã«
Time.current
ãš
Date.current
䜿çšããŠ
Date.current
ã
ãã®ãããããããã¹ãŠç¥ã£ãŠããã°ãã©ã®ã¢ããªã±ãŒã·ã§ã³ã«ãã¿ã€ã ãŸãŒã³ãµããŒãã远å ã§ããŸãã
ãã®äŸã§ã¯ããŠãŒã¶ãŒã®ã¿ã€ã ãŸãŒã³ã§
ActiveSupport::TimeZone
ãªããžã§ã¯ããè¿ãç¹å®ã®
time_zone
ã¡ãœãããæã€
User
ã¢ãã«ããã
User
ã
ãã®ã¡ãœããã
nil
以å€ãè¿ãå Žåãaround_action
around_action
ã䜿çšããŠã
Time.use_zone
ã¯ã©ã¹ã®ã¡ãœãããåŒã³åºããæž¡ããããããã¯ã§ãªã¯ãšã¹ãã®åŠçãç¶è¡ããŸãã ãããã£ãŠããã¹ãŠã®ãã¥ãŒã®ãã¹ãŠã®æéã¯ããŠãŒã¶ãŒã®ã¿ã€ã ãŸãŒã³ã§èªåçã«è¡šç€ºãããŸãã åºæ¥äžããïŒ
èå¥å
tzdata
ãããŒã¿ããŒã¹ã«ä¿åããããããªããžã§ã¯ãã«å€æããã«ã¯ã
app/models/user.rb
ãã®ã¡ãœããã䜿çšã
app/models/user.rb
ïŒ
ããã«ãããã¯ãããŒã¿ããŒã¹ã«æ ŒçŽãããŠãã
Europe/Moscow
ã¿ã€ãã®tzdataèå¥åããèå¥åãåã«
Moscow
ã§ãã
ActiveSupport::TimeZone
ãªããžã§ã¯ãã«å€æããç¹å¥ã«è€éãªã¡ãœããã§ãã
tzdata
ã§ã¯ãªã
tzdata
ããã¿ã€ã ãŸãŒã³
id
ãããŒã¿ããŒã¹ã«ä¿åããçç±ã¯ãçžäºéçšæ§ã§ã
tzdata
誰ãã
id
çè§£ããŠãããrailsã¿ã€ã ãŸãŒã³
id
ã¯Ruby on Railsã®ã¿ã§ãã
ãããŠãtzdataèå¥åãããŒã¿ããŒã¹ã«ä¿åãããã¢ã®ã¿ã€ã ãŸãŒã³ã»ãã¿ãŒã¡ãœããã®ããã«èŠããŸãã ActiveSupport :: TimeZoneã¯ã©ã¹ã®ãªããžã§ã¯ããŸãã¯èå¥åã®ãããããå
¥åãšããŠåãå
¥ããããšãã§ããŸãã
ç§ã
tzdata
èå¥åãããŒã¿ããŒã¹ã«ä¿åããããšã奜ãäž»ãªçç±ã¯ã䜿çšããPostgreSQLãã¿ã€ã ãŸãŒã³ã§é©åã«æ©èœããããã§ãã ããŒã¿ããŒã¹ã«
tzdata
èå¥åããããšããŠãŒã¶ãŒã®ã¿ã€ã ãŸãŒã³ã®çŸå°æéã調ã¹ã次ã®åœ¢åŒã®ã¯ãšãªã䜿çšããŠã¿ã€ã ãŸãŒã³ã«é¢ããããŸããŸãªåé¡ããããã°ããããšãéåžžã«äŸ¿å©ã§ãã
SELECT '2015-06-19T12:13:14Z' AT TIME ZONE 'Europe/Moscow';
èŠããŠããã¹ãéèŠãªPostgreSQLã®æ©èœã®1ã€ã¯ãã¿ã€ã ãŸãŒã³ã§çµããããŒã¿åã¯ã¿ã€ã ãŸãŒã³æ
å ±ãä¿åããããããã«æ¿å
¥ãããå€ãä¿åã®ããã«UTCã«å€æãã衚瀺ã®ããã«çŸå°æéã«æ»ãããšã§ãã ç§»è¡äžã®Ruby on Railsã¯ãã¿ã€ã ãŸãŒã³ãªãã®ã¿ã€ã ã¹ã¿ã³ãã¿ã€ãã®åãäœæããæžãèŸŒã¿æã«æéãä¿åããŸãã
ããŒã¿ããŒã¹ãžã®æ¥ç¶æã«ããã©ã«ãã§Ruby on Railsã¯UTCã§ã¿ã€ã ãŸãŒã³ãèšå®ããŸãã ã€ãŸããããŒã¿ããŒã¹ã®æäœäžãæéã®åŠçã¯ãã¹ãŠUTCã§è¡ãããŸãã ãã¹ãŠã®åã®å€ãå³å¯ã«UTCã§æžã蟌ãŸããŸãããããã£ãŠãããšãã°ãç¹å®ã®æ¥ã®ã¬ã³ãŒããéžæãããšãã¯ãDBMSãUTCã®æ·±å€ã«å€æããæ¥ä»ã ãã§ãªããåžæã®ã¿ã€ã ãŸãŒã³ã ãããŠãããªãã®æ¬¡ã®æ¥ã«ãšã³ããªã¯æ®ãããŸããã
次ã®ã¯ãšãªã¯ãã¢ã¹ã¯ã¯æéïŒUTC + 3ããã¹ãŠã®ãã®ïŒã«ã·ã£ãŒãåãããã¢ããªã±ãŒã·ã§ã³ã®1æ¥ã®æåã®3æéã®ã¬ã³ãŒããè¿ããŸããã
News.where('published_at >= ? AND published_at <= ?', Date.today, Date.tomorrow)
ActiveRecordããããæ£ãã倿ããããã«ãé©åãªã¿ã€ã ãŸãŒã³ã§æå»ãçŽæ¥æå®ããå¿
èŠããããŸãã
News.where('published_at >= ? AND published_at < ?', Time.current.beginning_of_day, Time.current.beginning_of_day + 1.day)
ã·ãªã¢ã«åãšæ¥ä»ãšæå»ã®è»¢é
ããã«ãçæãããããŸããããããªã«æã§ã¯ãããŸããã§ããã ã¢ããªã±ãŒã·ã§ã³ã³ãŒãã§ã¯ãæ°ããjavascript Dateãªããžã§ã¯ããæ§ç¯ããæé»çã«æååã«ãã£ã¹ãããããšã«ãããã¯ã©ã€ã¢ã³ãã§æéãçæãããå ŽæããããŸããã ãã®åœ¢åŒã§ã¯ããµãŒããŒã«éä¿¡ãããŸããã ãã®ãããRubyæšæºã©ã€ãã©ãªã®Timeã¯ã©ã¹ã®è§£æã¡ãœããã§ãã°ãçºèŠãããŸããããã®çµæãããã·ãã«ã¹ã¯ã¿ã€ã ãŸãŒã³ã®æéã¯æ£ããè§£æãããŸããã§ãã-æ¥ä»ã¯ã»ãŒåžžã«11æã§ããã
Time.parse('Mon May 18 2015 22:16:38 GMT+0600 (NOVT)')
æãéèŠãªããšã¯ãæåã®ã¯ã©ã€ã¢ã³ããã¢ããªã±ãŒã·ã§ã³ã䜿çšãããŸã§ãã®ãã°ãæ€åºã§ããªãã£ãããšã§ããOSèšå®ã«ããã·ãã«ã¹ã¯ã¿ã€ã ãŸãŒã³ãå«ãŸããŠããŸããã è¯ãäŒçµ±ã«ããããã®é¡§å®¢ã¯é¡§å®¢ã§ããããšã倿ããŸããã ã¢ã¹ã¯ã¯ã§éçºããå Žåããã®ãã°ã¯æ±ºããŠèŠã€ãããŸããïŒ
ã¢ããã€ã¹ã¯æ¬¡ã®ãšããã§ããéçºè
ã䜿çšããã¿ã€ã ãŸãŒã³ãšã¯ç°ãªãã¿ã€ã ãŸãŒã³ãCIãµãŒããŒã«èšå®ããŸãã CIãµãŒããŒã¯ããã©ã«ãã§UTCã§ããããã¹ãŠã®éçºè
ãã¢ã¹ã¯ã¯ãããŒã«ã«ã«ã€ã³ã¹ããŒã«ããŠãããããå¶ç¶ãã®ããããã£ãçºèŠããŸããã ãããã£ãŠãCIãµãŒããŒäžã®ãã©ãŠã¶ãŒã¯ãã¬ãŒã«ã¢ããªã±ãŒã·ã§ã³ã®ããã©ã«ãã®ã¿ã€ã ãŸãŒã³ïŒããã³ãã¹ããŠãŒã¶ãŒã®ã¿ã€ã ãŸãŒã³ïŒãšã¯ç°ãªãã¿ã€ã ãŸãŒã³ã§èµ·åããããã以åã«å€±æããããã€ãã®ãã°ãçºèŠããŸããã
ãã®äŸã¯ããµãã·ã¹ãã éã§æ
å ±ã亀æããããã«æšæºåãããæ©æ¢°å¯èªåœ¢åŒã䜿çšããããšã®éèŠæ§ã瀺ããŠããŸãã éçºè
ãããã«æ©æ¢°å¯èªåœ¢åŒã§ããŒã¿ã転éããããšã«ç
©ããããå Žåã以åã®ãã°ã¯ãããŸããã§ããã
ãã®ãããªæ©æ¢°å¯èªåœ¢åŒã®äŸã¯ISO 8601ã§ããããšãã°ãããã¯ã
Google JSONã¹ã¿ã€ã«ã¬ã€ãã«åŸã£ãŠJSONã«ã·ãªã¢ã«åãããæ¥æãéä¿¡ããããã®æšå¥šåœ¢åŒã§ãã
ãã®äŸã®æéã¯ã
2015-05-18T22:16:38+06:00
ããã«ãªããŸãã
ã¯ã©ã€ã¢ã³ãã§moment.jsã䜿çšããŠããå Žåã¯ã
toISOString()
ã¡ãœãããå¿
èŠã§ãã ãããŠãäŸãã°ãAngular.jsã¯ããã©ã«ãã§ISO 8601ã§æéãã·ãªã¢ã©ã€ãºããŸãïŒãããŠæ£ããè¡ããŸãïŒïŒã
ç§ã®è¬èãªæèŠã§ã¯ããã®åœ¢åŒã§ããã«æéãæåŸ
ãã
Time
ã¯ã©ã¹ã®é©åãªã¡ãœããã§ããã
parse
ããäžäœäºææ§ã®ããã«
parse
ã¡ãœãããæ®ãããšã匷ããå§ãããŸãã ãã®ããã«ïŒ
Time.iso8601(params[:till]) rescue Time.parse(params[:till])
äžäœäºææ§ãäžèŠãªå Žåã¯ãå®è¡ããã£ãããããæ²ç·ãã©ã¡ãŒã¿ãŒããããäžè¬çã«ã¯éªæªãªããããªã§ãããšããã¡ãã»ãŒãžãšãšãã«400 Bad Requestãšã©ãŒã³ãŒããè¿ããŸãã
ãã ããåã®æ¹æ³ã¯äŸç¶ãšããŠãšã©ãŒãèµ·ãããããã§ããUTCããã®ãªãã»ãããªãã§
params[:till]
æéã転éãããå Žåãäž¡æ¹ã®æ¹æ³ïŒããã³
iso8601
ããã³
parse
ïŒã¯ã
ãµãŒããŒã®ã¿ã€ã ãŸãŒã³
ã®çŸå°æéã§ãããã©ããã
parse
ã
ãŸãã ãã¢ããªã±ãŒã·ã§ã³ã ãµãŒããŒãã©ã®ã¿ã€ã ãŸãŒã³ã«ãããç¥ã£ãŠããŸããïŒ ç§ã¯ç°ãªã£ãŠããŸãã ãã
ActiveSupport::TimeZone
ãªæéè§£æã¡ãœããã¯æ¬¡ã®ããã«ãªããŸãïŒæ®å¿µãªãã
ActiveSupport::TimeZone
ã¯
iso8601
ã¡ãœããã¯ãããŸããããæ®å¿µã§ãïŒïŒ
Time.strptime(params[:till], "%Y-%m-%dT%H:%M:%S%z").in_time_zone rescue Time.zone.parse(params[:till])
ãããããã¹ãŠãã¯ã©ãã·ã¥ããå¯èœæ§ã®ããå ŽæããããŸã-ã³ãŒããæ³šææ·±ãèŠãŠãèªãã§ãã ããïŒ
ã·ã¹ãã éã§ããŒã«ã«æéã転éããïŒãŸãã¯ã©ããã«ä¿åããïŒå Žåã¯ãå¿
ãUTCããã®ãªãã»ãããšãšãã«è»¢éããŠãã ããïŒ å®éã«ã¯ãããŒã«ã«ã¿ã€ã èªäœãïŒã¿ã€ã ãŸãŒã³ããã£ãŠãïŒïŒç¶æ³ã«ãã£ãŠã¯ãããŸãã§ãã ããšãã°ãå€ããå¬ã«æéã倿Žããå Žåãåãæéã2åç¹°ãè¿ããŸãã1ã€ã®ãªãã»ããã§1åãå¥ã®ãªãã»ããã§1åã§ãã ã¢ã¹ã¯ã¯ã®æåŸã®ç§ãå€ã®åãæéã¯æåã«+4æéã®ã·ããã§ééãããã®åŸåã³ééããŸãããã+ 3ã®ã·ããã§ç§»åããŸããã ã芧ã®ãšããããããã®åæèšã¯UTCã®ç°ãªãæèšã«å¯Ÿå¿ããŠããŸãã é転éã§ã¯ã1æéã¯ãŸã£ããçºçããŸããã UTCããã®ãªãã»ãããæå®ããããŒã«ã«æéã¯åžžã«æç¢ºã§ãã ãã®ãããªç¬éã«ãå®è¡ãããããªãã»ããããªãå Žåã
Time.parse
ã¯åã«ä»¥åã®æç¹ã«æ»ãã
Time.zone.parse
TZInfo::AmbiguousTime
äŸå€
Time.zone.parse
ã¹ããŒããŸãã
以äžã«äŸã瀺ããŸãã
Time.zone.parse("2014-10-26T01:00:00")
ããŸããŸãªäŸ¿å©ãªããªãã¯
å°ãã¢ã³ããŒãããã远å ããå Žåã¯ã
timezone_select
æããŠãæåã«ãã·ã¢ã®
timezone_select
衚瀺ããããããã«ã¯äžæã«ããããšããã§ããŸãã å°æ¥çã«ã¯ããããªãã§ãå®è¡ã§ããŸã-Ruby on Railsã«ãã«ãªã¯ãšã¹ããéä¿¡ããŸããããä»ã®ãšãããæ®å¿µãªãããã¢ã¯ãã£ããã£ãªãã§ãã³ã°ããŸãïŒ
https :
//github.com/rails/rails/pull/20625
ãç®±ããåºããŠããã«ãååãªæé垯ããªãããšã倿ããå ŽåããããŸãã ããšãã°ããã·ã¢ã®ã¿ã€ã ãŸãŒã³ã¯ãã¹ãŠã§ã¯ãããŸããããå°ãªããšãUTCããã®åã
ã®ãªãã»ãããæã€ã¿ã€ã ãŸãŒã³ããããŸãã ActiveSupportãå
éšããã·ã¥ã«æ¿å
¥ãã翻蚳ã
i18n-timezones gemã«è¿œå ããã ãã§
ããããå®çŸã§ããŸãã Ruby on Railsã«ãã«ãªã¯ãšã¹ããéä¿¡ããããšããªãã§ãã ãã-圌ãã¯ãããã§ã¯ã¿ã€ã ãŸãŒã³ã®çŸç§äºå
žã§ã¯ãããŸããããšããèšèã§ãããåãå
¥ããŸããïŒ
ãã§ãã¯ããŸãã ïŒã
https://gist.github.com/Envek/cda8a367764dc2cacbc0
# config/locales/ru.yml ru: timezones: Simferopol: Omsk: Novokuznetsk: Chita: Khandyga: Sakhalin: Ust-Nera: - Anadyr:
Javascript
ãªããããã³ããšã³ãã®ãªãææ°ã®Webã¢ããªã±ãŒã·ã§ã³ãšã¯äœã§ããïŒ ããªãã®æ
ç±ãåãããŸã-ãã¹ãŠãããã»ã©ã¹ã ãŒãºã§ã¯ãããŸããïŒ çŽç²ãªJavaScriptã§ã¯ãUTCããã®ã¿ãªãã»ãããååŸã§ããŸããããã¯ããŠãŒã¶ãŒã®OSã§æå¹ã«ãªããŸãã-ããã ãã§ãã ãããã£ãŠã誰ããå®éã«
moment.jsã©ã€ãã©ãªãšãã®è£å®çãª
ã¢ãŒã¡ã³ãã¿ã€ã ãŸãŒã³ã©ã€ãã©ãªã䜿çšããéåœã«ãããŸãããã®ã©ã€ãã©ãªã¯ã
tzdata
ããŠãŒã¶ãŒã®ãã©ãŠã¶ãŒã«çŽæ¥ãã©ãã°ããŸãïŒã¯ãããŠãŒã¶ãŒã¯åã³äœåãªãããã€ããããŠã³ããŒãããå¿
èŠããããŸãïŒã ããããããã§ãããããå©çšããã°äœã§ãã§ããŸãã ãŸãããŸãã¯ã»ãšãã©ãã¹ãŠã
ééããªãå¿
èŠãªäœ¿çšäŸïŒ
ISO8601圢åŒã®æ£ããã¿ã€ã ã¹ã¿ã³ããæ¢ã«ããå Žåã¯ããããMomentèªäœã®
parseZone
ã¡ãœããã«
parseZone
ã ãã§ãã
moment.parseZone(ISO8601Timestamp)
ããŒã«ã«ã¿ã€ã ãŸãŒã³ã«ã¿ã€ã ã¹ã¿ã³ããããå Žåãã¢ãŒã¡ã³ãã¿ã€ã ãŸãŒã³ã¯ã©ã®ã¿ã€ã ãŸãŒã³ã§ããããéç¥ããå¿
èŠããããåæã¯æ¬¡ã®ããã«å®è¡ãããŸãã moment.tz(timestamp, formatString, timezoneIdentifier)
ã¢ããªã±ãŒã·ã§ã³ã®ãã¹ãŠã®å Žæã§ãããã®ã¡ãœããã䜿çšããŠæéãåæããå ŽåïŒå¿ããŠãã ããnew Date()
ïŒïŒããã®åŸããã¹ãŠãé 調ã«ãªããããžã£ã³ãæéããããã«å¿ããŠãããç©ããã«ãªããŸãããã¬ã³ãã£ãªãã¬ãŒã ã¯ãŒã¯ã«åºã¥ããéåžžã«ãªãããªããã³ããšã³ãã«ã€ããŠã¯ããããã®åå¥ã®ã©ã€ãã©ãªãåç
§ããŠãã ãããããšãã°ãangle-momentã䜿çšããŸããããã«ãããã¢ããªã±ãŒã·ã§ã³å
šäœã®ã¿ã€ã ãŸãŒã³ãåçã«èšå®ããç¹å¥ãªãã£ã¬ã¯ãã£ãã䜿çšããŠãã®ã¿ã€ã ãŸãŒã³ã®ããŒãžã«ãã¹ãŠã®æéãèªåçã«è¡šç€ºã§ããŸããè§åºŠã䜿çšããå Žå-æãã¯ã€ã«ããªããšããå§ãããŸãããŸãšã
ã±ãŒã¹ã®90ïŒ
ã§æ©èœããäžè¬çãªæšå¥šäºé
ã¯æ¬¡ã®ãšããã§ãã- (. . ) UTC.
- . , , UTC.
- : , UTC . , - «» - .
- , .
- , , - , , .
- , â , .
- , â , , UTC .
- , â NTP
tzdata
(, tzdata
).
ãã®æ
å ±ã誰ãã«ãšã£ãŠååã§ãªãå Žåã¯ãMail.ruã®Vladimir Rudnyhã®èè
ã«ããHabrahabrã®æçšãªèšäºãèªãã§ãã ãããç¹ã«å°æ¥ã®å Žåã¯ãã¿ã€ã ãŸãŒã³ãšæéãæäœããããšã®ããŸããŸãªãã¥ã¢ã³ã¹ã«ã€ããŠè©³ãã説æããŠããŸãïŒhttp : //habrahabr.ru /äŒç€Ÿ/ mailru /ããã°/ 242645 /ãã ã¹ã³ããã®è峿·±ãæè²ãããªããããŸãããã®ãããªã§ã¯ãã¿ã€ã ãŸãŒã³ã«é¢ããããããã¹ãŠã®åé¡ãã©ãããæ¥ãã®ãããããŠç§ãããã¯ããã«çè§£ããããããããè±èªã§èªã£ãŠããŸãïŒãã¡ãããããã¥ã¡ã³ãã§ãïŒåœŒå¥³ã¯ããªãã®äž»ãªå人ã§ããããã®èšäºã®ç¯å²ãè¶
ããŠå€ãã®ããšãåŠã¶ããšãã§ããŸããPS>ãã®èšäºã¯ãDevConf 2015ã§ã®ç§ã®ãã¬ãŒã³ããŒã·ã§ã³ã«åºã¥ããŠããŸããã¹ã©ã€ãã«ã€ããŠã¯ããã¡ããã芧ãã ããããããªã¯ãRailsClubã®ãã°ããã人ãã¡ã«ãã£ãŠæçš¿ãããŠããŸãããšããã§ãä»å¹ŽãRailsClubã«ã³ãã¡ã¬ã³ã¹ã®ã¹ãã³ãµãŒã«ãªããŸãã-ãããããäŒãããŸãããïŒ