Подтвердить что ты не робот

Дни, часы, минуты, секунды между двумя датами

У меня две даты, одна меньше, чем другая. Я хочу создать такую ​​строку, как этот

"0 дней, 0 часов, 23 минут, 18 секунд"

представляет разницу между двумя датами. Как я могу получить эти элементы этой строки?

4b9b3361

Ответ 1

TimeSpan - это тот объект, который вам нужен:

TimeSpan span = (DateTime.Now - DateTime.Now);

String.Format("{0} days, {1} hours, {2} minutes, {3} seconds", 
    span.Days, span.Hours, span.Minutes, span.Seconds);

Ответ 2

Когда вы вычитаете один DateTime из другого, вы получаете экземпляр TimeSpan, который предоставляет эти значения.

TimeSpan diff = DateTime.Now - DateTime.Today;
string formatted = string.Format(
                       CultureInfo.CurrentCulture, 
                       "{0} days, {1} hours, {2} minutes, {3} seconds", 
                       diff.Days, 
                       diff.Hours, 
                       diff.Minutes, 
                       diff.Seconds);

Ответ 3

Использовать TimeSpan

DateTime startTime = DateTime.Now;

DateTime endTime = DateTime.Now.AddSeconds( 75 );

TimeSpan span = endTime.Subtract ( startTime );
Console.WriteLine( "Time Difference (seconds): " + span.Seconds );
Console.WriteLine( "Time Difference (minutes): " + span.Minutes );
Console.WriteLine( "Time Difference (hours): " + span.Hours );
Console.WriteLine( "Time Difference (days): " + span.Days );

String yourString = string.Format("{0} days, {1} hours, {2} minues, {3} seconds",
    span.Days, span.Hours, span.Minutes, span.Seconds);

Ответ 4

Используйте класс TimeSpan, который вы получите, когда вы вычтите даты.

Вы можете форматировать вывод, используя стандарт или пользовательский форматирование строк.

"0 дней, 0 часов, 23 минут, 18 секунд"

может иметься что-то вроде:

TimeSpan ts = DateTime.Now - DateTime.Today;
Console.WriteLine(
   string.Format("{0:%d} days, {0:%h} hours, {0:%m} minutes, {0:%s} seconds", ts)
);

IMO, он чище и проще использовать string.Format вместо того, чтобы избегать слов в вашей строке формата (что вам нужно, если вы только что использовали .ToString), или создать его вручную.

Ответ 5

Пробовали ли вы использовать

TimeSpan()

который, безусловно, может сделать то, что вы хотите

Ответ 6

    DateTime myDay = DateTime.Now;
    DateTime otherDate = DateTime.Now.AddYears(1);
    var test = otherDate.Subtract(myDay);
    Console.WriteLine("Days:" + test.Days + "Hours:" + test.Hours +"Minutes" +  test.Minutes +"Seconds" + test.Seconds);

Здесь тест имеет тип TimeStamp

Ответ 7

Не забывайте, что если вы хотите, чтобы этот расчет был переносимым, вам необходимо сохранить его как UTC, а затем, когда вы показываете его преобразование в локальное время. Как правило, Хранить даты в формате UTC и конвертировать в локальное время для презентации.

Ответ 8

Как насчет чего-то подобного?

    TimeSpan diff = dateTimeNew - dateTimeOld;
    string output = string.Format("{0} days, {1} hours, {2} minues, {3} seconds", diff.Days, diff.Hours, diff.Minutes, diff.Seconds);
    Console.WriteLine(output);

Ответ 9

TimeSpan diffTime = dateTimeNew -PreviousDate;
int days=diffTime.Days;
int hours=diffTime.Hours;
int minutes=diffTime.Minutes;
int seconds=diffTime.Seconds;