TimeSpan к дружественной строковой библиотеке (C#)

Короче говоря, это зависит от какой точки к какой. В мелкой копии возразите, что B указывает для возражения местоположению A в памяти. В глубокой копии все вещи в объектной ячейке памяти A копируются для возражения ячейке памяти B.

Эта статья Wiki имеет большую схему.

http://en.wikipedia.org/wiki/Object_copy

11
задан Tim Cooper 6 May 2014 в 13:32
поделиться

5 ответов

Не полнофункциональная реализация, но она должна подвести вас достаточно близко.

DateTime dtNow = DateTime.Now;
DateTime dtYesterday = DateTime.Now.AddDays(-435.0);
TimeSpan ts = dtNow.Subtract(dtYesterday);

int years = ts.Days / 365; //no leap year accounting
int months = (ts.Days % 365) / 30; //naive guess at month size
int weeks = ((ts.Days % 365) % 30) / 7;
int days = (((ts.Days % 365) % 30) % 7);

StringBuilder sb = new StringBuilder();
if(years > 0)
{
    sb.Append(years.ToString() + " years, ");
}
if(months > 0)
{
    sb.Append(months.ToString() + " months, ");
}
if(weeks > 0)
{
    sb.Append(weeks.ToString() + " weeks, ");
}
if(days > 0)
{
    sb.Append(days.ToString() + " days.");
}
string FormattedTimeSpan = sb.ToString();

В конце концов, действительно ли вам нужно сообщить кому-то, что срок действия документа истекает ровно через 1 год, 5 через месяцы, 2 недели и 3 дня? Разве вы не можете сказать им, что срок действия документа истечет через 1 год или через 5 месяцев? Просто возьмите самую большую единицу и произнесите ее больше n.

14
ответ дан 3 December 2019 в 01:53
поделиться

Объект TimeSpan имеет свойства Days, Hours, Minutes и Seconds, поэтому не составит труда создать фрагмент, который форматирует эти значения в удобную строку.

К сожалению, дни - это самое большое значение. Что-нибудь длиннее, и вам придется беспокоиться о днях в месяце на каждый год ... и т. Д. На мой взгляд, вам лучше останавливаться на нескольких днях (добавленные усилия, похоже, не стоят выгоды).

ОБНОВЛЕНИЕ

... Я решил, что подниму это из своего собственного комментария:

Понятно, но действительно ли «Срок действия этого документа истекает через 10 лет, 3 месяца, 21 день, 2 часа и 30 минут» более полезен или менее глуп? Если бы это было на мое усмотрение, поскольку ни одно из представлений не кажется очень полезным ...

Я ' d оставить срок действия до тех пор, пока дата не станет достаточно близкой (может быть, 30 или 60 дней, если вы беспокоитесь об обновлении документа).

Мне кажется, гораздо лучший выбор UX.

3
ответ дан 3 December 2019 в 01:53
поделиться

Вероятно, он не сделает все, что вы ищете, но в версии 4 Microsoft будет реализовывать IFormattable на TimeSpan .

1
ответ дан 3 December 2019 в 01:53
поделиться

Для форматирования любого периода, превышающего 1 день (например, месяц / год / десятилетие и т. Д.), Объекта Timespan недостаточно.

Предположим, ваш временной интервал составляет 35 дней, тогда с 1 апреля вы получит один месяц и пять дней, а с 1 декабря - один месяц и четыре дня.

0
ответ дан 3 December 2019 в 01:53
поделиться

См. как-я-вычислить-относительное-время , заданный ( пользователем номер 1 ) год назад, когда SO был молод и не публично. Это было (вероятно) основанием для отображения текущего возраста для вопросов и ответов SO.

-1
ответ дан 3 December 2019 в 01:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: