1 か月の時間数を計算する組み込み関数はありますか? サマータイム (1 時間を追加または短縮) に対応する必要があります。
質問する
213 次
1 に答える
3
真夜中が常に有効であるとは限らないタイムゾーンにいない場合は、次のようにすることができます (VB 構文が少しずれている場合は申し訳ありません)。
Dim start = New DateTime(year, month, day, 0, 0, 0, DateTimeKind.Local)
Dim end = start.AddMonths(1)
Dim length = end.ToUniversalTime() - start.ToUniversalTime()
Dim hours = length.TotalHours
DST 移行が現地時間の真夜中に発生するブラジルのような場所にいる場合、これには潜在的な問題があります。上記はすべて、システム ローカル タイム ゾーンを使用することを前提としていることに注意してください。
Noda Timeを使用すると、適切な値を作成してから、関連する日の開始時に にLocalDate
変換し、あいまいさなくその差を計算できます。C# の例:ZonedDateTime
var zone = ... // Whatever DateTimeZone you want...
var start = new LocalDate(year, month, day);
var end = start.PlusMonths(1);
var startInstant = zone.AtStartOfDay(start).ToInstant();
var endInstant = zone.AtStartOfDay(end).ToInstant();
var duration = endInstant - startInstant;
var hours = duration.Ticks / NodaConstants.TicksPerHour;
于 2012-10-12T13:45:33.750 に答える