2017-01-30 7 views
2

Есть ли способ проверить дату, если она существует?Проверить, существует ли местное время на дату NODA TIME

это может показаться странным, но если вы примените дневную экономию в определенной зоне, например America/New_york, 12 марта. 2017 г. с 2:00 до 3:00 - это летнее время. литературный разговор с 12 марта. 2017 г. с 2 до 2:59 утра не существует в свое время. я хочу проверить данное время даты, если она существует

я попытался использовать этот

= данная дата 12 марта 2017 года 2:30 утра

var timeZoneProvider = DateTimeZoneProviders.Tzdb.GetZoneOrNull("America/New_York"); 
var localDate = LocalDateTime.FromDateTime(dateTime); 
var result = timeZoneProvider.AtStrictly(localDate).ToDateTimeUtc(); 

он бросает и ошибка есть способ проверить его перед использованием AtStrictly? что там, где он выдает ошибку, и говорит, что дата не существует, это связано с тем, что DayLight сохраняет в этой зоне

ответ

2

Метод DateTimeZone.MapLocal может предоставить вам эту информацию. Вот некоторые методы расширения, которые сделают это легким. (Положите их в статическом классе где-нибудь.)

public static bool IsInvalidTime(this DateTimeZone tz, LocalDateTime ldt) 
{ 
    return tz.MapLocal(ldt).Count == 0; 
} 

public static bool IsAmbiguousTime(this DateTimeZone tz, LocalDateTime ldt) 
{ 
    return tz.MapLocal(ldt).Count > 1; 
} 

Затем вы можете сделать что-то подобное в весенний период:

var timeZone = DateTimeZoneProviders.Tzdb["America/New_York"]; 
var localDateTime = new LocalDateTime(2017, 3, 12, 2, 30); 

if (timeZone.IsInvalidTime(localDateTime)) { ... true ... } 

и осенью:

var timeZone = DateTimeZoneProviders.Tzdb["America/New_York"]; 
var localDateTime = new LocalDateTime(2017, 11, 5, 1, 30); 

if (timeZone.IsAmbiguousTime(localDateTime)) { ... true ... } 

Конечно, это предполагает, что вы просто хотите предварительно проверить. Если вы действительно хотите применить некоторые правила конверсии, то здесь будет AtLeniently или ResolveLocal(... your custom rules ...).

 Смежные вопросы

  • Нет связанных вопросов^_^