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

Преобразование TimeSpan в DateTime

Я хочу преобразовать Timespan в Datetime. Как я могу это сделать?

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

DateTime dt;
TimeSpan ts="XXX";

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

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

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

4b9b3361

Ответ 1

Неправильно конвертировать 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;

Ответ 2

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

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

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

Ответ 3

Для этого вам нужна ссылочная дата.

Пример из   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);  

Ответ 4

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

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

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

Ответ 5

Если вам нужно показать только значение времени в методе datagrid или label, лучшим способом является преобразование непосредственно времени в datetime datatype.

SELECT CONVERT (datetime, myTimeField) как myTimeField FROM Table1

Ответ 6

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

Ответ 7

Проблема со всем вышесказанным заключается в том, что преобразование возвращает неправильное количество дней, указанное в 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
}

Ответ 8

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

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

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

Ответ 9

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

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