UTokyo Online Education Education コンピュータシ …...うるう秒の対応と議論 • 時刻情報は情報システムでは重要 • 例えば、タイムスタンプによる新旧判定、ログ
うるう秒とタイムゾーン
-
Upload
shinichiaoyagi -
Category
Technology
-
view
598 -
download
1
Transcript of うるう秒とタイムゾーン
![Page 1: うるう秒とタイムゾーン](https://reader036.fdocuments.net/reader036/viewer/2022080907/55a8ec531a28abae2b8b4647/html5/thumbnails/1.jpg)
うるう秒とタイムゾーン
Xamarin 本社に Mono 申したい会 兼 Xamarin 新年会
2015/01/15
青柳臣一 @ShinichiAoyagi
![Page 2: うるう秒とタイムゾーン](https://reader036.fdocuments.net/reader036/viewer/2022080907/55a8ec531a28abae2b8b4647/html5/thumbnails/2.jpg)
自己紹介
青柳臣一
@ShinichiAoyagi
職業: ソフトウエア開発(大阪 淀屋橋)
Xamarin + ASP.NET MVC(C# mono) + WPF(C#)
WPF(C#)、Windows Froms(VB)
iOS(Objective-C)、Android(Java)
Spring MVC(Java)
![Page 3: うるう秒とタイムゾーン](https://reader036.fdocuments.net/reader036/viewer/2022080907/55a8ec531a28abae2b8b4647/html5/thumbnails/3.jpg)
うるう秒
2015/7/1 の 9時(日本時間)にうるう秒実施
08:59:59 → 08:59:60 → 09:00:00
前回は 2012/7/1
今までに 25回
いずれも 1秒増
Linux や MySQL が CPU 100% 張り付きになる現象発生
![Page 4: うるう秒とタイムゾーン](https://reader036.fdocuments.net/reader036/viewer/2022080907/55a8ec531a28abae2b8b4647/html5/thumbnails/4.jpg)
うるう秒のサポート状況
Linux ではタイムゾーンを right/Japan とかにする
ほとんどのサーバーは UTC か Japan、Asia/Tokyo でしょ
SQL Server、Oracle、MySQL
‘2015/07/01 08:59:60’ は格納でき無さそう
パースもでき無さそう
いずれも未確認
![Page 5: うるう秒とタイムゾーン](https://reader036.fdocuments.net/reader036/viewer/2022080907/55a8ec531a28abae2b8b4647/html5/thumbnails/5.jpg)
うるう秒のサポート状況(プログラミング言語)
Ruby
うるう秒をサポートするタイムゾーンを指定していれば ‘2015/07/01
08:59:60’ を扱えるらしい
Mono、.NET Framework
public DateTime (int year, int month, int day, int hour, int minute, int second, int millisecond)
{
if (year < 1 || year > 9999 ||
month < 1 || month >12 ||
day < 1 || day > DaysInMonth(year, month) ||
hour < 0 || hour > 23 ||
minute < 0 || minute > 59 ||
second < 0 || second > 59 ||
millisecond < 0 || millisecond > 999)
throw new ArgumentOutOfRangeException ("Parameters describe an " +
"unrepresentable DateTime.");
![Page 6: うるう秒とタイムゾーン](https://reader036.fdocuments.net/reader036/viewer/2022080907/55a8ec531a28abae2b8b4647/html5/thumbnails/6.jpg)
サマータイム
きちんとサポートするのは大変
アメリカ、カナダは州・自治体ごとにサマータイムを決めている
PST とかじゃ指定できない
結構変更される
例: アメリカのサマータイム開始日
1967~1973 は 4月の最終日曜日
1974 は 1/6
1975 は 2/23
1976~1986 は 4月の最終日曜日
1987~は 4月の第一日曜日
![Page 7: うるう秒とタイムゾーン](https://reader036.fdocuments.net/reader036/viewer/2022080907/55a8ec531a28abae2b8b4647/html5/thumbnails/7.jpg)
tz database
世界中のタイムゾーンのデータベース
サマータイム、うるう秒
地域も細かく指定
Asia/Tokyo、America/Indiana/Indianapolis など
今は IANA が管理してるらしい
結構頻繁に更新。去年は a~j
Linux では普通に採用されてるっぽい
Asia/Tokyo とかの指定方法は tz database のもの
![Page 8: うるう秒とタイムゾーン](https://reader036.fdocuments.net/reader036/viewer/2022080907/55a8ec531a28abae2b8b4647/html5/thumbnails/8.jpg)
.NET Framework でのタイムゾーン
TimeZoneInfo クラス
過去のサマータイムの情報も持ってる
けど、あきらかに少ない
そもそも地域の指定が PST とか
![Page 9: うるう秒とタイムゾーン](https://reader036.fdocuments.net/reader036/viewer/2022080907/55a8ec531a28abae2b8b4647/html5/thumbnails/9.jpg)
iOS、Android でのタイムゾーン
iOS
NSTimeZone* tz = [NSTimeZone timeZoneWithName:@"Asia/Tokyo"];
この形式で指定するってことは tz database?
過去のサマータイムも持ってるのかな?
Android
TimeZone クラス
これも “Asia/Tokyo” 形式。ってことは tz database?
過去のサマータイムも持ってるのかな?
![Page 10: うるう秒とタイムゾーン](https://reader036.fdocuments.net/reader036/viewer/2022080907/55a8ec531a28abae2b8b4647/html5/thumbnails/10.jpg)
Xamarinでのタイムゾーン
Mono の TimeZoneInfo?
ソース見たら #if MONOTOUCH とかあるけど、、、
どうなんだろう?