Именно поэтому я начал проект Noda Time. Он дразнит предположения, которые у вас могут быть. Например, в вашем примере 2:20 утра встречается дважды - поэтому, когда вы говорите new DateTime(2015,10,24, 2,20, 00)
, как система должна знать, означает ли вы первое или второе? Это даже не ясно, в каком часовом поясе вы ожидаете, чтобы быть в
В Нода времени, код будет выглядеть примерно так:.
var local = new LocalDateTime(2015, 10, 24, 2, 20, 0);
var zone = DateTimeZoneProviders.Tzdb[yourTimeZoneId];
// Apparently you want ambiguous times to resolve as the earlier
// occurrence.
var resolver = Resolvers.CreateMappingResolver(
Resolvers.ReturnEarlier, Resolvers.ThrowWhenSkipped);
// This is now the *first* occurrence of 2:20am
var zoned = local.InZone(zone, resolver);
// This is now the *second* occurrence of 2:10am
var laterZoned = zoned.Plus(Duration.FromMinutes(50));
Обратите внимание, как все это намного более явным здесь. У вас нет , у вас есть, чтобы создать свой собственный резольвер, во многих случаях - вы можете использовать InZoneStrictly
, который будет бросать неоднозначные или пропущенные времена, и InZoneLeniently
, который примет позже неоднозначных времен и начала интервала после пробела для пропущенных времен. (Некоторые из них немного меняются для Noda Time 2.0, мы надеемся сделать вещи проще для обычных случаев.)