c# - from - conversión no válida desde system datetime hasta system timespan
Conversión de TimeSpan a DateTime (10)
Necesita una fecha de referencia para que esto sea útil.
Un ejemplo de 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);
Quiero convertir un Timespan a Datetime. ¿Cómo puedo hacer esto?
Encontré un método en Google:
DateTime dt;
TimeSpan ts="XXX";
//We can covnert ''ts'' to ''dt'' like this:
dt= Convert.ToDateTime(ts.ToString());
Hay alguna otra manera de hacer esto?
No es muy lógico convertir TimeSpan a DateTime. Trata de entender lo que dijo el leppie arriba. TimeSpan tiene una duración de 6 días, 5 horas y 40 minutos. No es una Fecha. Si digo 6 días; ¿Puedes deducir una fecha de eso? La respuesta es NO a menos que tenga una Fecha de REFERENCIA.
Entonces, si quiere convertir TimeSpan a DateTime, necesita una fecha de referencia. 6 días y 5 horas desde cuando? Entonces puedes escribir algo como esto:
DateTime dt = new DateTime(2012, 01, 01);
TimeSpan ts = new TimeSpan(1, 0, 0, 0, 0);
dt = dt + ts;
Primero, convierta el intervalo de tiempo en una cadena, luego en DateTime y luego vuelva a una cadena:
Convert.ToDateTime(timespan.SelectedTime.ToString()).ToShortTimeString();
Si bien la respuesta seleccionada es estrictamente correcta, creo que entiendo lo que el OP está tratando de obtener aquí, ya que tengo un problema similar.
Tenía un TimeSpan que deseaba mostrar en un control de cuadrícula (como hh: mm) pero la cuadrícula no parecía entender TimeSpan, solo DateTime. El OP tiene un escenario similar donde solo TimeSpan es la parte relevante, pero no consideró la necesidad de agregar el punto de referencia DateTime.
Por lo tanto, como se indicó anteriormente, simplemente agregué DateTime.MinValue (aunque cualquier fecha lo hará), que luego es ignorada por la cuadrícula cuando representa el intervalo de tiempo como una porción de tiempo de la fecha resultante.
Si solo necesita mostrar el valor del tiempo en una cuadrícula de datos o una etiqueta similar, la mejor manera es convertir directamente el tiempo en el tipo de datos datetime.
SELECT CONVERT (datetime, myTimeField) como myTimeField FROM Table1
También podría usar DateTime.FromFileTime (finishTime) donde finishTme es un largo que contiene los tics de un tiempo. O FromFileTimeUtc.
TimeSpan se puede agregar a un nuevo DateTime para lograr esto.
TimeSpan ts="XXX";
DateTime dt = new DateTime() + ts;
Pero como se mencionó anteriormente, no es estrictamente lógico sin una fecha de inicio válida. Me encontré con un caso de uso en el que solo pedí el aspecto del tiempo. funcionará bien siempre que la lógica sea correcta.
Un método fácil, usa tics:
new DateTime((DateTime.Now - DateTime.Now.AddHours(-1.55)).Ticks).ToString("HH:mm:ss:fff")
Esta función le dará una fecha (Sin día / mes / año)
Un problema con todo lo anterior es que la conversión devuelve el número incorrecto de días como se especifica en TimeSpan.
Usando lo anterior, a continuación se devuelve 3 y no 2.
¿Ideas sobre cómo preservar los 2 días en los argumentos de TimeSpan y devolverlos como el día de 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
}
var StartTime = new DateTime(item.StartTime.Ticks);