2010-01-27 64 views
42

Tengo un calendario y un cuadro de texto que contiene una hora del día. Quiero crear una fecha y hora que sea la combinación de los dos. Sé que puedo hacerlo mirando las horas y minutos y luego agregué estos al calendario DateTime, pero esto parece bastante desordenado.Agregar un horario a un DateTime en C#

¿Hay una manera mejor?

Respuesta

74

Puede usar el método DateTime.Add() para agregar la hora a la fecha.

DateTime date = DateTime.Now; 
TimeSpan time = new TimeSpan(36, 0, 0, 0); 
DateTime combined = date.Add(time); 
Console.WriteLine("{0:dddd}", combined); 

También puede crear su espacio de tiempo por parsing a String, si eso es lo que hay que hacer.

Como alternativa, podría utilizar otros controles. No mencionó si está utilizando winforms, wpf o asp.net, pero hay varios controles de selector de fecha y hora que admiten la selección de fecha y hora.

+1

Hizo el truco, muchas gracias. – 4imble

+0

después de horas intenté por '11:57 pm' y esto funcionó: ' TimeSpan time = new TimeSpan (23, 57, 00); DateTime date_with_time = mydate.Add (time); ' – stom

+0

Si alguna vez se encuentra en una situación en la que tiene una cantidad específica de tiempo (por ejemplo, X horas o Y minutos) hay funciones auxiliares para que no tenga que crea un TimeSpan(). por ejemplo: '' 'DateTime.UtcNow.AddSeconds (10);' '' // ¡un tiempo de 10 segundos en el futuro! –

0

Combine both. El selector de fecha y hora también admite el tiempo de selección.

Solo tiene que cambiar Format-Property y quizás CustomFormat-Property.

3

Dependiendo de cómo formato (y validar!) La fecha de inscripción en el cuadro de texto, se puede hacer esto:

TimeSpan time; 

if (TimeSpan.TryParse(textboxTime.Text, out time)) 
{ 
    // calendarDate is the DateTime value of the calendar control 
    calendarDate = calendarDate.Add(time); 
} 
else 
{ 
    // notify user about wrong date format 
} 

Tenga en cuenta que TimeSpan.TryParse espera que la cadena esté en el 'hh: mm' formato (segundos opcionales).

3

Usando https://github.com/FluentDateTime/FluentDateTime

DateTime dateTime = DateTime.Now; 
DateTime combined = dateTime + 36.Hours(); 
Console.WriteLine(combined); 
+2

Me encanta FuentDateTime. Si esta es la única suma de fecha y hora que desea hacer, puede que no valga la pena. Pero hay muchas otras cosas geniales, como averiguar cuándo será el próximo viernes. –

+0

@RichardGarside: ¿Te refieres al paquete FluentDateTime NuGet de [GitHub] (https://github.com/FluentDateTime)? –

+0

Está disponible como un paquete Nuget. Hay enlaces en la página de Github. –

6

Si está utilizando dos objetos DateTime, uno para almacenar la fecha la otra el tiempo, se puede hacer lo siguiente:

var date = new DateTime(2016,6,28); 

var time = new DateTime(1,1,1,13,13,13); 

var combinedDateTime = date.AddTicks(time.TimeOfDay.Ticks); 

Un ejemplo de esto puede ser encontrado here

+0

Justo lo que estaba buscando – kpkpkp

0
DateTime newDateTime = dtReceived.Value.Date.Add(TimeSpan.Parse(dtReceivedTime.Value.ToShortTimeString())); 
+1

Aunque esta es una respuesta correcta, debe proporcionar una explicación a OP en lugar de proporcionar una respuesta de solo código para asegurarse de que (y cualquier otra vista) comprenda por qué la respuesta es correcta. – JNYRanger

Cuestiones relacionadas