2013-03-13 5 views
1

Тема этого вопроса - расчеты даты и времени.Что происходит, когда клещ переполняется?

.NET, как и многие другие платформы, в значительной степени полагается на некоторую форму минимального дискретного представления времени, например DateTime.Ticks. Тик представляет собой тип Int64 с максимальным значением примерно 9 * 10 .

Предполагая, что часы .NET начали тикать с 1-JAN-0001, и после моих сырых расчетов потребуется около 30 000 лет для галочки до Int64.MaxValue.

Вопрос: что было бы общим подходом к борьбе с таким переполнением, должно ли оно произойти в следующем году?

+0

Это в четыре раза хуже, чем вы думаете, верхние два бита в базовом Int64 используются для хранения DateTime.Kind. Ясно, что вы не хотите, чтобы вокруг, когда проблема Y10K попадает. И, не допуская серьезных медицинских прорывов и серьезной перестройки в индустрии развлечений, вас не будет. –

+0

@ У вас есть какие-то статьи, на которые я могу ссылаться, что вы бы рекомендовали лучше объяснить, как хранятся даты и время (я заметил, что вы говорили о двух верхних битах для Kind), а затем ловушка решения Y2K? –

+0

Просто посмотрите на исходный источник. –

ответ

4

Я думаю, что, как и ошибка Y2K, существовавшая во многих программах COBOL, вам придется либо сдвинуть корень, либо расширить значение. Теперь, чтобы сделать этот оператор менее абстрактным, допустим, они сдвинули корень - так что это не будет 1-JAN-0001, это может быть 1-JAN-1001.

Это может вызвать некоторые проблемы. И вот почему ошибка в Y2K должна была быть решена в COBOL, поэтому, когда 2040 подходит к большому количеству магазинов, им придется либо изменить дату опрокидывания, либо увеличить значение.

В их случае расширение значения просто означает использование 4-значного года, но в этих программах MF это не всегда так просто, потому что данные не всегда хранятся в базе данных, много раз это на VSAM файл или что-то еще.

Итак, вот что, я думаю, произойдет, поскольку вычисления продолжают увеличиваться и увеличиваться (но меньше ... хмм), вы обнаружите, что они просто увеличат значение от Int64 до Int128 и оставьте корень справа, где это в. Это будет иметь нулевые побочные эффекты, о которых я могу думать, и поэтому это был бы самый безопасный подход.