Длина строки метки времени - PullRequest
       7

Длина строки метки времени

9 голосов
/ 11 декабря 2010

Если бы я сделал это

// Default implementation of UNIX time of the current UTC time
TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
string myResult = "";
myResult = Convert.ToInt64(ts.TotalSeconds).ToString();

Какова максимальная длина строки myResult и всегда ли она одного размера?

Ответы [ 4 ]

27 голосов
/ 11 декабря 2010

Int64 - это 64-разрядное целое число со знаком, что означает, что он имеет диапазон значений от −9,223,372,036,854,775,808 до 9,223,372,036,854,775,807.

Поскольку toString не форматирует вывод с запятыми,самое длинное возможное значение строки будет −9223372036854775808, что составляет 20 символов.

Теперь, поскольку это представляет метку времени UNIX, нам нужно принять во внимание то, что будет считаться «разумной» датой возврата.Когда я пишу это, текущая временная метка UNIX будет примерно равна 1292051460, то есть 10-значному числу.

Предполагая, что максимальная длина в 10 символов дает вам диапазон временных отметок от -99999999 до 9999999999.Это дает вам диапазон дат от «Пн, 31 октября 1966 14:13:21 GMT» до «Сб, 20 Nov 2286 17:46:39 GMT».Обратите внимание, что я включаю символ отрицания как символ в нижнюю границу, поэтому нижняя граница намного ближе к эпохе, чем верхняя граница.

Если вы не ожидаете даты до Хэллоуина1966 г. или после конца ноября 2286 г. можно разумно предположить, что длина строки не будет превышать 10 символов.Если вы ожидаете даты за пределами этого диапазона (скорее всего до 1966 года, а не после 2286 года), вы можете ожидать увидеть строку из 11 символов.Я не ожидал бы большего, чем это.

Это ожидаемое число символов максимум ;это может быть короче.

5 голосов
/ 11 декабря 2010

Предполагая, что код будет использоваться в будущем, это будет максимальная длина Int64.

Например, прямо сейчас это значение равно 1292022273, поэтому длина будет равна 10.

Вы можете найти калькулятор, который включает секунды здесь http://www.timeanddate.com/date/duration.html

1 голос
/ 11 декабря 2010

Если вы используете Convert.ToInt64() без форматирования, тогда ваша максимальная длина будет 20 , потому что минимальный Int64 равен -9223372036854775808 (для отрицательного знака требуется дополнительный символ). На практике, однако, он не будет использовать весь диапазон, предоставленный Int64 из-за ограничений в TimeSpan и DateTime.

И, нет, длина myResult не всегда будет одинаковой, но может варьироваться от 1 до 20. Это зависит только от текущего значения Convert.ToInt64(ts.TotalSeconds).

0 голосов
/ 11 декабря 2010

Чтобы получить максимальный размер TimeSpan, попробуйте использовать этот код:

var maxValue = Convert.ToInt64(TimeSpan.MaxValue).ToString();

Надеюсь, это поможет вам с вашим вопросом! Удачи!

С уважением, Дима.

...