Объект реального времени с. Годами и. Месяцами

Рассмотрим следующие 2 сценария: Сценарий 1). Сегодня 1 мая 2012 года и сценарий 2). Сегодня 1 сентября 2012 года.

Теперь рассмотрим, что мы пишем на нашей веб-странице следующее о комментарии, оставленном кем-то: «Этот комментарий был написан 3 месяца и 12 дней назад». Количество дней в обоих этих сценариях ВСЕГДА будет разным, даже если утверждение точно такое же. В сценарии 1 «3 месяца и 12 дней» будут равны102 days, Однако в сценарии 2 «3 месяца и 12 дней» будут104 days!

Теперь, чтобы подчеркнуть мою точку зрения, давайте рассмотрим другой пример и скажем, что кто-то оставил комментарий на нашем сайте 30 января 2013 года, а сегодня - 10 марта 2013 года. Наш настоящий объект TimeSpan должен знать эту относительную дату и может вычислить из следующего:

Что в марте 10 дней,Это 1 день в январе (считая с 30-го по 31-е).Что февраль месяц один месяц, независимо от того, сколько дней в нем (хотя это 28 дней).

Таким образом, это будет означать 10 дней + 1 день + 1 месяц всего, переводя вThis comment was posted 1 Month and 11 Days ago.

Теперь, если вы используете объект TimeSpan в стиле MS (или любой объект TimeSpan на любом языке), он даст вам количество дней с 30 января по 10 марта (39 дней), и поскольку объект TimeSpan не хранит относительную дату (базовая / начальная дата, которую мы вычли, чтобы получить интервал времени), если вы спросите его, сколько месяцев и дней прошло, то будет предположить, что в одном месяце 30 дней или, что еще хуже, среднее значение, превышающее 30 дней и верните остаток в днях, поэтому, чтобы получить 39 дней, он скажет вам, что прошел 1 месяц и 9 дней, и вы получитеThis comment was posted 1 Month and 9 Days ago сообщение. Помните, что оба этих сценария имеют одинаковую дату начала и одну и ту же текущую / конечную дату, да, объект Microsoft TimeSpan, не позволяющий нам сказать, что должен рассматриваться месяц февраль 2013, дал нам совершенно другой TimeSpan, от целых 2 дня. По сути, он солгал нам.

Проблема в том, что люди поверят в это, и кто знает, какие у них могут быть представления, как могут измениться их представления о прошлом, и какие решения и жизненный выбор они могут сделать, пытаясь реконструировать события в прошлом в своем собственном сознании, хотя никогда замечая или понимая недостаток и присущую ему неспособность представлять время, столь распространенное сегодня повсюду. Они не поймут, что языки программирования не осознают (или не заботятся) о том, что в прошлом месяце было 31 день, а не 30, 29 или 28 - или наоборот, и что это складывается, когда вы увеличиваете TimeSpan.

Это проблема в основе этого поста. Я понимаю, что большинство людей не будет заботиться об этой разнице (но будьте уверены, что некоторые из нас понимают, и не могут иметь этого на своих плечах), и если это вас не беспокоит, это нормально. Хотелось бы, чтобы это меня не беспокоило, я бы сэкономил себе время, стресс и разочарование. Если это не мешает, вы можете использовать функцию для эффективного текстового отображения относительного времени (настраиваемое от 1 до 6 узлов от секунд до лет) вместо того, чтобы использовать его, как правило, с незначительной точностью, которую оно обеспечивает.

К моему разочарованию, я заметил, что нет реального объекта времени, если вы получаете время и делаете.years или же.months вы ничего не получите, вы получите только.days и ниже, потому что объект timeSpan не несет ничего, чтобы сказать ему, в каком месяце или году был создан timeSpan. Поэтому он никогда не узнает, сколько месяцев прошло, так как дни в каждом месяце меняются в течение года и даже больше в течение високосного года.

В ответ на это я опубликую функцию, которую я разработал, чтобы получать ТОЧНЫЕ показания и иметь возможность возвращать такие вещи, как следующие, на моей веб-странице ASP.NET ...

Отправлено 4 года, 3 месяца, 14 дней, 15 часов, 18 минут и 24 секунды назад

Я думал, что будет ...

timeSpan.GetActualNumberOf[Months/Days/Hours/etc] (базовая дата должна быть указана конечно)

… Метод type для этого типа данных, но не было.

Все, что вам действительно нужно сделать, - это создать еще одно свойство для объекта timeSpan, чтобы присвоить ему базовую дату, на которую была рассчитана разница, тогда приведенная выше симпатичная строка будет довольно легко вычислена, и.year & .month будет существовать!

ОБНОВЛЕНИЕ: Я значительно расширил и обновил свой официальный ответ и детали использования кода в своем ответе ниже, 100% рабочий ответ и код (полностью), точные и точные относительные время / даты, без приближений - спасибо.

Ответы на вопрос(1)

Ваш ответ на вопрос