私のコードでは、ZoneLocalMapping.ResultType.Ambiguous を処理しようとしています。この線
unambiguousLocalDateTime = localDateTimeMapping.EarlierMapping;
「Ambiguous 型の結果に対して EarlyMapping プロパティを呼び出さないでください」というメッセージとともに InvalidOperationException をスローします。
どのように対処すればよいかわかりません。例を教えてください。
これは私のコードがどのように見えるかです:
public Instant getInstant(int year, int month, int day, int hour, int minute)
{
var localDateTime = new LocalDateTime(year, month, day, hour, minute); //invalidated, might be not existing
var timezone = DateTimeZone.ForId(TimeZoneId); //TimeZone is set elsewhere, example "Brazil/East"
var localDateTimeMapping = timezone.MapLocalDateTime(localDateTime);
ZonedDateTime unambiguousLocalDateTime;
switch (localDateTimeMapping.Type)
{
case ZoneLocalMapping.ResultType.Unambiguous:
unambiguousLocalDateTime = localDateTimeMapping.UnambiguousMapping;
break;
case ZoneLocalMapping.ResultType.Ambiguous:
unambiguousLocalDateTime = localDateTimeMapping.EarlierMapping;
break;
case ZoneLocalMapping.ResultType.Skipped:
unambiguousLocalDateTime = new ZonedDateTime(localDateTimeMapping.ZoneIntervalAfterTransition.Start, timezone);
break;
default:
throw new InvalidOperationException(string.Format("Unexpected mapping result type: {0}", localDateTimeMapping.Type));
}
return unambiguousLocalDateTime.ToInstant();
}
クラス ZoneLocalMapping を見ると、次のコードが表示されます。
/// <summary>
/// In an ambiguous mapping, returns the earlier of the two ZonedDateTimes which map to the original LocalDateTime.
/// </summary>
/// <exception cref="InvalidOperationException">The mapping isn't ambiguous.</exception>
public virtual ZonedDateTime EarlierMapping { get { throw new InvalidOperationException("EarlierMapping property should not be called on a result of type " + type); } }
そのため、例外が発生していますが、EarlierMapping を取得するにはどうすればよいですか?