Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

夏時間対応始めました。 - .NET Conf関西 2018 LT

305 visualizaciones

Publicado el

夏時間対応始めました。 - .NET Conf関西 2018 LT

Publicado en: Tecnología
  • Inicia sesión para ver los comentarios

  • Sé el primero en recomendar esto

夏時間対応始めました。 - .NET Conf関西 2018 LT

  1. 1. 夏時間対応始めました。
  2. 2. .NETでどう対応するの? ホンマに導入するんやったら早くテストしたい
  3. 3. 夏時間はタイムゾーン情報に入ってるから カスタムタイムゾーンを作ってみる var jst = TimeZoneInfo.FindSystemTimeZoneById(”Tokyo Standard Time"); var delta = new TimeSpan(2,0,0); // 時差は2時間 var rules = new List<TimeZoneInfo.AdjustmentRule>(); // 6月の最初の週末の2時に始まって var start = TimeZoneInfo.TransitionTime.CreateFloatingDateRule( new DateTime(1, 1, 1, 2, 0, 0), 6, 1, DayOfWeek.Sunday); // 8月の最後の週末の2時に終わる var end = TimeZoneInfo.TransitionTime.CreateFloatingDateRule( new DateTime(1, 1, 1, 2, 0, 0), 8, 5, DayOfWeek.Sunday); // 2019 - 2020 年に適用 rules.Add(TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule( new DateTime(2019,1,1), new DateTime(2020,12,31),delta, start, end)); // 標準のJSTをもとに作成 var jstWithDt = TimeZoneInfo.CreateCustomTimeZone( jst.Id, jst.BaseUtcOffset, jst.DisplayName, jst.StandardName, jst.DaylightName, rules.ToArray());
  4. 4. 一時間ずつ足していってみる // 日本時間だと 2019/06/02 00:00:00 の UTC var utcDateTime = new DateTime(2019, 6, 1, 15, 0, 0, DateTimeKind.Utc); // UTC の時間をもとにタイムゾーンを指定して、DateTime に変換 Console.WriteLine(TimeZoneInfo.ConvertTime(utcDateTime, jstWithDt)); //2019/06/02 00:00:00 Console.WriteLine(TimeZoneInfo.ConvertTime(utcDateTime, jst)); //2019/06/02 00:00:00 Console.WriteLine(TimeZoneInfo.ConvertTime(utcDateTime.AddHours(1), jstWithDt)); //2019/06/02 01:00:00 Console.WriteLine(TimeZoneInfo.ConvertTime(utcDateTime.AddHours(1), jst)); //2019/06/02 01:00:00 Console.WriteLine(TimeZoneInfo.ConvertTime(utcDateTime.AddHours(2), jstWithDt)); //2019/06/02 04:00:00 Console.WriteLine(TimeZoneInfo.ConvertTime(utcDateTime.AddHours(2), jst)); //2019/06/02 02:00:00 Console.WriteLine(TimeZoneInfo.ConvertTime(utcDateTime.AddHours(3), jstWithDt)); //2019/06/02 05:00:00 Console.WriteLine(TimeZoneInfo.ConvertTime(utcDateTime.AddHours(3), jst)); //2019/06/02 03:00:00
  5. 5. 一時間ずつ足していってみる // 日本時間だと 2019/06/02 00:00:00 の UTC var utcDateTime = new DateTime(2019, 6, 1, 15, 0, 0, DateTimeKind.Utc); // UTC の時間をもとにタイムゾーンを指定して、DateTime に変換 Console.WriteLine(TimeZoneInfo.ConvertTime(utcDateTime, jstWithDt)); //2019/06/02 00:00:00 Console.WriteLine(TimeZoneInfo.ConvertTime(utcDateTime, jst)); //2019/06/02 00:00:00 Console.WriteLine(TimeZoneInfo.ConvertTime(utcDateTime.AddHours(1), jstWithDt)); //2019/06/02 01:00:00 Console.WriteLine(TimeZoneInfo.ConvertTime(utcDateTime.AddHours(1), jst)); //2019/06/02 01:00:00 Console.WriteLine(TimeZoneInfo.ConvertTime(utcDateTime.AddHours(2), jstWithDt)); //2019/06/02 04:00:00 Console.WriteLine(TimeZoneInfo.ConvertTime(utcDateTime.AddHours(2), jst)); //2019/06/02 02:00:00 Console.WriteLine(TimeZoneInfo.ConvertTime(utcDateTime.AddHours(3), jstWithDt)); //2019/06/02 05:00:00 Console.WriteLine(TimeZoneInfo.ConvertTime(utcDateTime.AddHours(3), jst)); //2019/06/02 03:00:00
  6. 6. いつもの一時間ずつの足しかた // そもそも UTC なんかで作ってない var jstDateTime = new DateTime(2019, 6, 2); // TimeZoneInfo ってなにそれ?美味しいの? Console.WriteLine(jstDateTime); //2019/06/02 00:00:00 // ただただ足すだけ Console.WriteLine(jstDateTime.AddHours(1)); //2019/06/02 01:00:00 // ここで勝手に夏時間適用してほしい Console.WriteLine(jstDateTime.AddHours(2)); //2019/06/02 04:00:00(希望) // ただただ足すだけ Console.WriteLine(jstDateTime.AddHours(3)); //2019/06/02 05:00:00
  7. 7. 悲報 DateTimeにデフォルトのTimeZoneは指定できない システム情報から自動で取得される
  8. 8. Windowsでタイムゾーンの指定
  9. 9. Windowsのタイムゾーン情報の場所
  10. 10. Windowsのタイムゾーン情報の場所
  11. 11. https://msdn.microsoft.com/ja-jp/library/windows/desktop/ms724253(v=vs.85).aspx https://www.codeproject.com/tips/700884/fixing-daylight-saving-time-of-windows-for-next
  12. 12. 夏時間対応始められそう。 賢い人に続きはお願いしたい。。。
  13. 13. ご清聴 ありがとうございました

×