うるう秒とタイムゾーン
TRANSCRIPT
うるう秒とタイムゾーン
Xamarin 本社に Mono 申したい会 兼 Xamarin 新年会
2015/01/15
青柳臣一 @ShinichiAoyagi
自己紹介
青柳臣一
@ShinichiAoyagi
職業: ソフトウエア開発(大阪 淀屋橋)
Xamarin + ASP.NET MVC(C# mono) + WPF(C#)
WPF(C#)、Windows Froms(VB)
iOS(Objective-C)、Android(Java)
Spring MVC(Java)
うるう秒
2015/7/1 の 9時(日本時間)にうるう秒実施
08:59:59 → 08:59:60 → 09:00:00
前回は 2012/7/1
今までに 25回
いずれも 1秒増
Linux や MySQL が CPU 100% 張り付きになる現象発生
うるう秒のサポート状況
Linux ではタイムゾーンを right/Japan とかにする
ほとんどのサーバーは UTC か Japan、Asia/Tokyo でしょ
SQL Server、Oracle、MySQL
‘2015/07/01 08:59:60’ は格納でき無さそう
パースもでき無さそう
いずれも未確認
うるう秒のサポート状況(プログラミング言語)
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.");
サマータイム
きちんとサポートするのは大変
アメリカ、カナダは州・自治体ごとにサマータイムを決めている
PST とかじゃ指定できない
結構変更される
例: アメリカのサマータイム開始日
1967~1973 は 4月の最終日曜日
1974 は 1/6
1975 は 2/23
1976~1986 は 4月の最終日曜日
1987~は 4月の第一日曜日
tz database
世界中のタイムゾーンのデータベース
サマータイム、うるう秒
地域も細かく指定
Asia/Tokyo、America/Indiana/Indianapolis など
今は IANA が管理してるらしい
結構頻繁に更新。去年は a~j
Linux では普通に採用されてるっぽい
Asia/Tokyo とかの指定方法は tz database のもの
.NET Framework でのタイムゾーン
TimeZoneInfo クラス
過去のサマータイムの情報も持ってる
けど、あきらかに少ない
そもそも地域の指定が PST とか
iOS、Android でのタイムゾーン
iOS
NSTimeZone* tz = [NSTimeZone timeZoneWithName:@"Asia/Tokyo"];
この形式で指定するってことは tz database?
過去のサマータイムも持ってるのかな?
Android
TimeZone クラス
これも “Asia/Tokyo” 形式。ってことは tz database?
過去のサマータイムも持ってるのかな?
Xamarinでのタイムゾーン
Mono の TimeZoneInfo?
ソース見たら #if MONOTOUCH とかあるけど、、、
どうなんだろう?