うるう秒とタイムゾーン

10
うるう秒とタイムゾーン Xamarin 本社に Mono 申したい会 兼 Xamarin 新年会 2015/01/15 青柳臣一 @ShinichiAoyagi

Upload: shinichiaoyagi

Post on 17-Jul-2015

598 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: うるう秒とタイムゾーン

うるう秒とタイムゾーン

Xamarin 本社に Mono 申したい会 兼 Xamarin 新年会

2015/01/15

青柳臣一 @ShinichiAoyagi

Page 2: うるう秒とタイムゾーン

自己紹介

青柳臣一

@ShinichiAoyagi

職業: ソフトウエア開発(大阪 淀屋橋)

Xamarin + ASP.NET MVC(C# mono) + WPF(C#)

WPF(C#)、Windows Froms(VB)

iOS(Objective-C)、Android(Java)

Spring MVC(Java)

Page 3: うるう秒とタイムゾーン

うるう秒

2015/7/1 の 9時(日本時間)にうるう秒実施

08:59:59 → 08:59:60 → 09:00:00

前回は 2012/7/1

今までに 25回

いずれも 1秒増

Linux や MySQL が CPU 100% 張り付きになる現象発生

Page 4: うるう秒とタイムゾーン

うるう秒のサポート状況

Linux ではタイムゾーンを right/Japan とかにする

ほとんどのサーバーは UTC か Japan、Asia/Tokyo でしょ

SQL Server、Oracle、MySQL

‘2015/07/01 08:59:60’ は格納でき無さそう

パースもでき無さそう

いずれも未確認

Page 5: うるう秒とタイムゾーン

うるう秒のサポート状況(プログラミング言語)

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: うるう秒とタイムゾーン

サマータイム

きちんとサポートするのは大変

アメリカ、カナダは州・自治体ごとにサマータイムを決めている

PST とかじゃ指定できない

結構変更される

例: アメリカのサマータイム開始日

1967~1973 は 4月の最終日曜日

1974 は 1/6

1975 は 2/23

1976~1986 は 4月の最終日曜日

1987~は 4月の第一日曜日

Page 7: うるう秒とタイムゾーン

tz database

世界中のタイムゾーンのデータベース

サマータイム、うるう秒

地域も細かく指定

Asia/Tokyo、America/Indiana/Indianapolis など

今は IANA が管理してるらしい

結構頻繁に更新。去年は a~j

Linux では普通に採用されてるっぽい

Asia/Tokyo とかの指定方法は tz database のもの

Page 8: うるう秒とタイムゾーン

.NET Framework でのタイムゾーン

TimeZoneInfo クラス

過去のサマータイムの情報も持ってる

けど、あきらかに少ない

そもそも地域の指定が PST とか

Page 9: うるう秒とタイムゾーン

iOS、Android でのタイムゾーン

iOS

NSTimeZone* tz = [NSTimeZone timeZoneWithName:@"Asia/Tokyo"];

この形式で指定するってことは tz database?

過去のサマータイムも持ってるのかな?

Android

TimeZone クラス

これも “Asia/Tokyo” 形式。ってことは tz database?

過去のサマータイムも持ってるのかな?

Page 10: うるう秒とタイムゾーン

Xamarinでのタイムゾーン

Mono の TimeZoneInfo?

ソース見たら #if MONOTOUCH とかあるけど、、、

どうなんだろう?