TimeSpan для преобразования типа datetime



Я хочу, чтобы преобразовать значение типа TimeSpan для Датавремя. Как я могу это сделать?



Я нашел один метод в Google:



DateTime dt;
TimeSpan ts="XXX";

//We can covnert 'ts' to 'dt' like this:

dt= Convert.ToDateTime(ts.ToString());


есть ли другой способ сделать это?

938   10  

10 ответов:

Это не очень логично для преобразования времени в datetime. Попытайтесь понять, что леппи сказал выше. TimeSpan-это продолжительность, скажем, 6 дней 5 часов 40 минут. Это не свидание. Если я скажу 6 дней; вы можете вывести дату из него? Ответ-нет, если у вас нет контрольной даты.

поэтому, если вы хотите конвертировать TimeSpan в DateTime, вам нужна ссылочная дата. 6 дней и 5 часов после? Так что вы можете написать что-то вроде этого:

 DateTime dt = new DateTime(2012, 01, 01);
 TimeSpan ts = new TimeSpan(1, 0, 0, 0, 0);
 dt = dt + ts;

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

У меня был TimeSpan, который я хотел отобразить в элементе управления сеткой (как только hh:mm), но сетка, похоже, не понимала TimeSpan, только DateTime . У OP есть аналогичный сценарий, где только TimeSpan является соответствующей частью, но не рассматривал необходимость добавления контрольной точки DateTime.

Итак, как указано выше, я просто добавил дату и время.MinValue (хотя любая дата будет делать), которая впоследствии игнорируется сеткой, когда она отображает timespan как временную часть результирующей даты.

вам нужна ссылочная дата, чтобы это было полезно.

пример из http://msdn.microsoft.com/en-us/library/system.datetime.add.aspx

// Calculate what day of the week is 36 days from this instant.  
System.DateTime today = System.DateTime.Now;  
System.TimeSpan duration = new System.TimeSpan(36, 0, 0, 0);  
System.DateTime answer = today.Add(duration);  
System.Console.WriteLine("{0:dddd}", answer);  

TimeSpan может быть добавлен в свежий DateTime для достижения этой цели.

TimeSpan ts="XXX";
DateTime dt = new DateTime() + ts;

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

Если вам нужно только показать значение времени в datagrid или аналогичной метке, лучший способ-преобразовать непосредственно время в тип данных datetime.

выберите Преобразовать (datetime, myTimeField) как myTimeField из Table1

var StartTime = new DateTime(item.StartTime.Ticks);

вы также можете использовать DateTime.FromFileTime (finishTime), где finishTme-это длинный, содержащий тики времени. Или Из Filetimeutc.

простой метод, используйте галочки:

new DateTime((DateTime.Now - DateTime.Now.AddHours(-1.55)).Ticks).ToString("HH:mm:ss:fff")

эта функция даст вам дату (без дня / месяца / года)

проблема со всем вышеперечисленным заключается в том, что преобразование возвращает неверное количество дней, как указано в TimeSpan.
Используя выше, ниже возвращает 3, а не 2.

идеи о том, как сохранить 2 дня в аргументах TimeSpan и вернуть их как День DateTime?

public void should_return_totaldays()
{
    _ts = new TimeSpan(2, 1, 30, 10);
    var format = "dd";
    var returnedVal = _ts.ToString(format);
    Assert.That(returnedVal, Is.EqualTo("2")); //returns 3 not 2
}

сначала преобразуйте timespan в строку, затем в DateTime, а затем обратно в строку:

Convert.ToDateTime(timespan.SelectedTime.ToString()).ToShortTimeString();

Comments

    Ничего не найдено.