2015年8月12日水曜日

WinRT とタイムゾーン・夏時間の話

先日、北朝鮮が2015年8月15日を以て時制を現在のUTC+9から30分遅らせるよというニュースがありました。UTC+8:30になると。意図はさておき、とにかく一国の採用するタイムゾーンが変わる事になります。

で、この手の話はそれほど珍しい事ではなく、年に数回はどこかの国や地域でタイムゾーン・夏時間の変更が行われています。Windows の場合、その都度Windows Updateで対応するタイムゾーン・夏時間の情報が配信されます。


Windows のタイムゾーン・夏時間更新は、Technetのblogで通知されます。
普通に使っていればWindowsUpdateで自然と更新される感じです。
右のArchiveを見ると分かるように、結構頻繁に更新されます。


アプリ側は、上品に…自分の中にタイムゾーン情報等を持たず、OSのサービスから情報を取るようにしていれば、OSの更新に合わせて自動的に新しい情報を使えるようになるという仕組みです。

Wheel World Clock のタイムゾーン設定UI
これらのタイムゾーン(時間と名前)はアプリ内部で持っている訳ではなく、
OSの持っている情報を右から左に表示しているだけです。
北朝鮮用のタイムゾーン情報が配信されれば、ここにその旨が追加される…はず。


ただ、WinRT 上でタイムゾーン・夏時間の列挙・変換を行うには注意が必要です。

…この言い回しで、賢明なる読者様ならばあーはいはい大体わかったWinRT だからねだからなのね?とお分かりでしょう。はいそれで正解で、

WinRT API からは、「自分のローカルタイムゾーン」と、「UTC」 この二つしか見えない作りになっています。

  • OSのサポートするタイムゾーン・夏時間の列挙
  • 各タイムゾーン間の時間の変換

がバッサリ落ちてるんですね。困る。

※とはいいつつ、世界時計でも作るのでなければ…ローカルタイムとUTCだけで「大抵は」済む話かもしれません。

ただOS自体には機能があるので、それを叩くPCLがNuGetで公開されています。ありがたいことです。

WinRTTimeZones
https://www.nuget.org/packages/WinRTTimeZones/

ページにはWinRT, WinStore, WP8, WPA81, .NET4.5 がサポート環境として記載されていますが、試したところ Win10 UWP でも使えています。

拙作の世界時計アプリ Wheel World Clock も、このNuGet Packageを使ってタイムゾーンの列挙・時間の変換をWindows Phone 8.1 / Windows 8.1 / Windows 10 UWP 上で行っています。




※ 30分刻みのタイムゾーンは例が無い、けしからん!という論調のニュースが一部にはあるようですが、そんなことは無く…イラン、ネパール、中央オーストラリアのようにUTCから30分ずれたタイムゾーンを採用している国・地域は幾つか存在します。


0 件のコメント:

コメントを投稿