1

ゾーン間隔を調べている NodaTime コードがいくつかあります。

var zone = DateTimeZoneProviders.Tzdb["America/Phoenix"];
var interval = zone.GetZoneInterval(SystemClock.Instance.Now);
Console.WriteLine(interval.End);
Console.WriteLine(interval.IsoLocalEnd);

interval.EndEOTこのゾーンは夏時間を使用しないため、これは予期される出力です。しかし、interval.IsoLocalEnd値を出力できません。例外がスローされます。

System.ArgumentOutOfRangeException was unhandled
  HResult=-2146233086
  Message=Value should be in range [-27255-31195]
Parameter name: year
Actual value was 31197.
  Source=NodaTime
  ParamName=year
  StackTrace:
       at NodaTime.Utility.Preconditions.CheckArgumentRange(String paramName, Int32 value, Int32 minInclusive, Int32 maxInclusive)
       at NodaTime.Calendars.BasicCalendarSystem.GetYearTicks(Int32 year)
       at NodaTime.Calendars.GregorianCalendarSystem.GetYearTicks(Int32 year)
       at NodaTime.Calendars.BasicGJCalendarSystem.GetMonthOfYear(LocalInstant localInstant, Int32 year)
       at NodaTime.Calendars.BasicCalendarSystem.GetMonthOfYear(LocalInstant localInstant)
       at NodaTime.Fields.BasicMonthOfYearDateTimeField.GetValue(LocalInstant localInstant)
       at NodaTime.LocalDateTime.get_Month()
       at NodaTime.Text.LocalDateTimePatternParser.<.cctor>b__8(LocalDateTime value)
       at NodaTime.Text.Patterns.DatePatternHelper.<>c__DisplayClassd`2.<>c__DisplayClass10.<CreateMonthOfYearHandler>b__c(TResult value, StringBuilder sb)
       at NodaTime.NodaAction`2.Invoke(TArg1 arg1, TArg2 arg2)
       at NodaTime.Text.Patterns.SteppedPatternBuilder`2.SteppedPattern.Format(TResult value)
       at NodaTime.Text.Patterns.PatternBclSupport`1.Format(T value, String patternText, NodaFormatInfo formatInfo)
       at NodaTime.LocalDateTime.ToString(String patternText, IFormatProvider formatProvider)
       at System.IO.TextWriter.WriteLine(Object value)
       at System.IO.TextWriter.SyncTextWriter.WriteLine(Object value)

これはバグですか?または、これは予期された動作であり、値interval.End == Instant.MaxValueを使用する前に確認する必要がありinterval.IsoLocalEndますか?

NodaTime 1.1.0 を使用しています。

4

1 に答える 1

3

一般に、野田時間では、時間の終わりに近い (または終わりの) 時点でインスタントをローカル日付に変換する際に問題があります。たとえばissue 197issue 113を参照してください。これは、同じ種類の問題の別の発生のようです。

バグを報告することをお勧めします。ただし、1 つの提案: Noda Time 1.0 で同じ結果が表示されるかどうかを確認してください: 問題 197 (1.1.0 で) の修正により、これがリグレッションとして発生した可能性があります。

于 2013-04-19T21:01:38.667 に答える