Я хочу преобразовать Timespan в Datetime. Как я могу это сделать?
Я нашел один метод в Google:
DateTime dt;
TimeSpan ts="XXX";
//We can covnert 'ts' to 'dt' like this:
dt= Convert.ToDateTime(ts.ToString());
Есть ли другой способ сделать это?
Я хочу преобразовать Timespan в Datetime. Как я могу это сделать?
Я нашел один метод в Google:
DateTime dt;
TimeSpan ts="XXX";
//We can covnert 'ts' to 'dt' like this:
dt= Convert.ToDateTime(ts.ToString());
Есть ли другой способ сделать это?
Неправильно конвертировать TimeSpan в DateTime. Попытайтесь понять, что сказал leppie выше. 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.
Итак, как указано выше, я просто добавил DateTime.MinValue(хотя любая дата будет делать), которая затем игнорируется сеткой, когда она отображает время как временную часть результирующей даты.
Для этого вам нужна ссылочная дата.
Пример из 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 или label, лучшим способом является преобразование непосредственно времени в datetime datatype.
SELECT CONVERT (datetime, myTimeField) как myTimeField FROM Table1
var StartTime = new DateTime(item.StartTime.Ticks);
Проблема со всем вышесказанным заключается в том, что преобразование возвращает неправильное количество дней, указанное в 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
}
Легкий метод, используйте тики:
new DateTime((DateTime.Now - DateTime.Now.AddHours(-1.55)).Ticks).ToString("HH:mm:ss:fff")
Эта функция даст вам дату (без дня/месяца/года)
Сначала преобразуйте временной интервал в строку, затем в DateTime, затем вернитесь к строке:
Convert.ToDateTime(timespan.SelectedTime.ToString()).ToShortTimeString();