2015-07-09 3 views
-1

Возможно ли точно клонировать значение DateTime для типа данных Timespan. Я преобразовал datetime в промежуток времени, вычитая значение min. Однако, как это отображается в формате DD MM YYYY HH MM SS.Преобразование DateTime (DD MM YYYY HH MM SS) в Timespan like (DD MM YYYY HH MM SS) в C#

TimeSpan timeSpan = (DateTime)startTimeValue - DateTime.MinValue; 
+0

Почему вы заботитесь о количестве времени, которое прошло с полуночи первого января 1 года нашей эры? У вас есть дата и время, а не время, поэтому почему бы не использовать для него тип DateTime? Особенно, если вы собираетесь конвертировать его в строку в любом случае. – Blorgbeard

+0

Возможно, вы хотите преобразовать startTimeValue в формат «DD MM YYYY HH MM SS» и для этого использовать startTimeValue.toString («dd MM yyyy HH mm ss»). Если нет, объясните свое требование, чтобы сделать его более понятным. – ATP

+0

Мне нужно вставить значение datetime в db, но тип данных в db предоставляется как Timespan. Теперь я не могу изменить тип db, пытаясь выполнить manupulate через код. – Darey

ответ

0

Немного поздно, но так как вы не получили никакого внимания, так ..

Можно ли точно клонировать значение DateTime данным TimeSpan Типу

Ну, так как ваш пример работает ровно с DateTime.MinValue имеет 0 как Ticks. Это эквивалентно;

TimeSpan timeSpan = TimeSpan.FromTicks(((DateTime)startTimeValue)Ticks); 

как оно отображается в формате ДД ММ ГГГГ ЧЧ ММ СС

Прежде всего, нет DD, YYYY и SS как custom date and time format specifiers. Они представлены как dd, yyyy и ss.

TimeSpan совершенно отличается от DateTime. Это временной интервал, но DateTime является момент во времени. Как вы можете видеть, временной интервал не может иметь никаких частей месяца и года. В котором Calendar? Не все каландры имеют 12 месяцев. В каком месяце точно? Сколько месяцев прошло 29 дней в GregorianCalender? Или ChineseLunisolarCalendar? Это зависит, правильно? Месяц и годы концепции неоднозначны для TimeSpan.

Но еще, вы можете форматировать ваш TimeSpan в день, час, минуты и секунды с TimeSpan.ToString() метод, как;

timeSpan.ToString(@"d\.hh\:mm\:ss") 

В качестве лучшей альтернативы, вы можете использовать Nodatime, который имеет Period класс и PeriodUnits перечисления, которые вы можете вычислить их, как;

using System; 
using NodaTime; 

public class Program 
{ 
    public static void Main() 
    { 
     LocalDate start = new LocalDate(2010, 11, 20); 
     LocalDate end = new LocalDate(2015, 7, 13); 

     Period period = Period.Between(start, end, 
             PeriodUnits.Months | PeriodUnits.Years); 

     Console.WriteLine("{0} - {1}", period.Months, period.Years); // 7 - 4 
    } 
} 
Смежные вопросы