2014-10-21 3 views
1

Рассмотрим следующий код:DateTime и продолжительность добавить

void main() { 

    var duration = new Duration(days : 1); 
    print ("duration " + duration.toString()); 

    var d1 = new DateTime(2014, 10, 26); 
    print ("d1 " + d1.toString()); 

    d1 = d1.add(duration); 
    print ("d1 + duration " + d1.toString()); 


    var d2 = new DateTime(2014, 10, 20); 
    print ("d2 " + d2.toString()); 

    d2 = d2.add(duration); 
    print ("d2 + duration " + d2.toString()); 

} 

и выход:

duration 24:00:00.000000 
d1 2014-10-26 00:00:00.000 
d1 + duration 2014-10-26 23:00:00.000 
d2 2014-10-20 00:00:00.000 
d2 + duration 2014-10-21 00:00:00.000 

Почему 20 октября и 26 ведут себя по-разному. Я проверил один и тот же код для каждого дня в году, и каждый год имеет один день, когда дата + 1 день равна той же дате. Каждый год дата, кажется, в октябре между 25/10 и 30/10.

Это ошибка или я что-то пропустил?

С уважением Пеймана

ответ

1

Я думаю, Октябрь 26 (и в другие дни между 25/10 и 30/10 из-за перехода на летнее конец периода Разница в 1 ч (23:. 00: 00.000) это указывает в качестве причины.

+2

конечно, вы правы. Я пропустил часть DateTime быть по местному времени. это летнее. 20 октября работает, как я ожидал (= следующий день) var d1 = новый DateTime.utc (2014, 10, 26); Исправляет мою проблему. – Peyman

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