У меня две даты, одна меньше, чем другая. Я хочу создать такую строку, как этот
"0 дней, 0 часов, 23 минут, 18 секунд"
представляет разницу между двумя датами. Как я могу получить эти элементы этой строки?
У меня две даты, одна меньше, чем другая. Я хочу создать такую строку, как этот
"0 дней, 0 часов, 23 минут, 18 секунд"
представляет разницу между двумя датами. Как я могу получить эти элементы этой строки?
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);
Когда вы вычитаете один 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);
Использовать 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);
Используйте класс 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
), или создать его вручную.
Пробовали ли вы использовать
TimeSpan()
который, безусловно, может сделать то, что вы хотите
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
Не забывайте, что если вы хотите, чтобы этот расчет был переносимым, вам необходимо сохранить его как UTC, а затем, когда вы показываете его преобразование в локальное время. Как правило, Хранить даты в формате UTC и конвертировать в локальное время для презентации.
Как насчет чего-то подобного?
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);
TimeSpan diffTime = dateTimeNew -PreviousDate;
int days=diffTime.Days;
int hours=diffTime.Hours;
int minutes=diffTime.Minutes;
int seconds=diffTime.Seconds;