2010-06-25 34 views
38

Estoy trabajando con una base de datos mysql antigua en la que se almacena una fecha (sin tiempo) como una fecha y una hora como una cadena (sin fecha).Combina la fecha y la hora cuando la fecha es un DateTime y la hora es una cadena

En C# Tengo un DateTime con un valor como 2010-06-25 12:00:00 AM y una cadena con un valor como 15:02.

¿Cuál es la forma más concisa de combinar estos sin una gran sobrecarga?

que han intentado algunos métodos que incluyen:

DateTime NewDateTime = DateTime.Parse(OldDateTime.ToString("yyyy-MM-dd ") + TimeString); 

No me gusta convertir el DateTime existente en una cadena y añadiendo el tiempo.

Puedo convertir la cadena de tiempo en una fecha, pero luego obtengo la fecha de hoy y la agrego porque un número de tics a la fecha de tiempo anterior es incorrecta.

Nota: No se preocupe por la validación, se realiza en otro lugar. La hora se representa utilizando el formato de 24 horas sin segundos.

Respuesta

60

Puede utilizar TimeSpan.Parse para analizar el tiempo, y luego añadir el resultado a la fecha:

DateTime newDateTime = oldDateTime.Add(TimeSpan.Parse(timeString)); 
+0

buena solución. @JYelton, usaría esto y marcaría la respuesta de dtb correcta. –

+0

No puedo creer que me haya olvidado de usar 'TimeSpan': esto es precisamente lo que se necesitaba. – JYelton

0

Creo que estás preocuparse por la conversión de cadenas demasiado. Combinando los 2 elementos de cadena juntos se guardará el análisis de cadena de fecha de todos modos, que probablemente sea más costoso.

¿Esto va a repetirse muchas veces o un simple paso en un proceso más largo?

8
var dt = new DateTime(2010, 06, 26); // time is zero by default 
var tm = TimeSpan.Parse("01:16:50"); 
var fullDt = dt + tm; // 2010-06-26 01:16:50 
-1

Estoy bastante seguro de que puede combinar y convertir estos valores en una marca de tiempo utilizando SQL.

+3

Golpear la base de datos para tales cosas es una muy mala idea. Su programa será mucho más lento y, de repente, tendrá fuertes dependencias externas sin ninguna buena razón. – simendsjo

4

he usado algo similar a lo que dice simendsjo, excepto que sigue teniendo como un DateTime

DateTime date = Convert.ToDateTime(txtTrainDate.Text); 
DateTime time = Convert.ToDateTime(ddTrainTime.SelectedValue); 
DateTime dtCOMPLTDTTM = new DateTime(date.Year, date.Month, date.Day, time.Hour, time.Minute, time.Second); 
+0

Bueno para cuando quiere combinar la parte "time" de un valor 'DateTime' y la parte" date "de otro valor' DateTime'. – mmcrae

Cuestiones relacionadas