есть ли более умный способ генерировать “время с тех пор” с DateTime объекты

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

  1. Я думал бы Промежуток. Часы дали бы Вам часы, даже если его несколько daye в прошлом, но оно похоже на него, разламывают его на его отдельные компоненты (дни, месяцы, и т.д.). Как я добрался бы несколько общих часы назад (даже если его больше чем 1 день?

  2. Есть ли любой более чистый способ записать этот тип кода ниже, поскольку это кажется симпатичным spagetti-выходом.

Вот код

        DateTime when = GetDateTimeinPast();
        TimeSpan ts = DateTime.Now.Subtract(when);

        switch (ts.Days)
        {
            case 0:
               if (ts.Hours < 1)
                    b.Append( ts.Minutes + " minutes ago");
               else
                   b.Append( ts.Hours + " hours ago");
                break;
            case 1:
                b.Append( " yesterday");
                break;
            case 2:
            case 3:                
            case 4:

                b.Append( "on " + when.DayOfWeek.ToString());
                break;
            default:
                b.Append(ts.Days + " days ago");
                break;
        }
7
задан jwg 28 December 2012 в 12:18
поделиться

2 ответа

Используйте свойство TotalHours или другие свойства Total [TimeUnit] в объекте промежутка времени.

Для промежутка времени 1:10 (чч: мм) это равняется 1 часам и 10 минутам или 1,167 общему количеству часов и 70 TotalMinutes .

Что касается очистки, используйте ветки if / else, как и раньше. switch / case не поможет вам в этих условиях, только для определенных значений. Примерно так:

DateTime when = GetDateTimeinPast();
TimeSpan ts = DateTime.Now.Subtract(when);
if (ts.TotalHours < 1)
    b.AppendFormat("{0} minutes ago", (int)ts.TotalMinutes);
else if (ts.TotalDays < 1)
    b.AppendFormat("{0} hours ago", (int)ts.TotalHours);
//etc...
15
ответ дан 6 December 2019 в 10:46
поделиться

В качестве альтернативы у меня есть решение, которое делает это не только днями, но и неделями, месяцами и годами. Подход немного другой. Он продвигается от прошлого к будущему, сначала пробуя большие шаги, а если он перескакивает, переключаясь на следующий, меньший.

PeriodOfTimeOutput.cs

1
ответ дан 6 December 2019 в 10:46
поделиться
Другие вопросы по тегам:

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