2009-06-25 28 views
5

En C# si quiero analizar una fecha y hora, pero algunas veces solo tengo una fecha y no un componente de tiempo o ninguna fecha, sino un componente de tiempo, ¿cómo podría hacerlo? Normalmente, cuando omite el componente de hora, automáticamente supone que la hora es 12:00 a.m. Pero no quiero esto Si falta el componente de tiempo, solo quiero que DateTime almacene solo una fecha y deje desactivado el componente de tiempo.DateTime En C#

Respuesta

17

El valor de un DateTime internamente es solo UInt64 (ulong en C#) que almacena el número de tics desde una fecha anterior, por lo que le guste o no, el componente de tiempo siempre estará allí.

+1

+1, DateTime es realmente un conjunto de métodos de utilidad envueltos alrededor de un valor integral. –

+0

El valor interno no está firmado, aunque tiene poca diferencia en cuanto al uso. – Noldorin

2

DateTime por definición almacena una fecha y una hora tales que no puede representar una de ellas sin representar la otra. Si solo quiere la fecha (o solo la hora), analice la información que necesita y descarte el resto.

6

No es posible tener un DateTime sin un componente de tiempo. Puede almacenar un indicador booleano junto con él en un struct para almacenar datos sobre la existencia de ese componente. Sin embargo, no hay forma de utilizar la rutina de análisis automático para distinguir entre una cadena DateTime con un tiempo especificado como 12:00 PM y uno inexistente.

+0

Esto es lo que necesita –

5

Si realmente te molesta, siempre puedes crear una clase contenedora que pueda ocultar las partes de tiempo de la clase datetime.

4

No tendrá el componente de tiempo sin importar qué. Lo mejor que puede hacer es acceder a la propiedad Date en su objeto DateTime si realmente tiene que hacerlo.

http://msdn.microsoft.com/en-us/library/system.datetime.date.aspx

+0

La propiedad de fecha sigue siendo solo un DateTime con el componente de hora configurado a la medianoche. – LukeH

0

Usted podría tener una clase que almacena una fecha y hora y determina si el tiempo se ha puesto un solo o si la fecha fue fijada y valores de retorno en consecuencia.

0

Un objeto DateTime siempre almacena una fecha + una vez, no solo una. Siempre puede optar por trabajar solo con la parte de fecha, es decir, solo usar propiedades como Año, Mes, Día de la semana. Pero debajo siempre habrá algo de tiempo almacenado.

8

Si sólo necesita pantalla ciertas partes, sólo tiene que utilizar cualquiera de las cadenas de formato (ejemplos son para "en nosotros" cultura):

DateTime.Now.ToString("d"); // 5/26/2009 
DateTime.Now.ToString("t"); // 4:56 PM 

La referencia completa: http://msdn.microsoft.com/en-us/library/az4se3k1.aspx

0

utilice

DateTime date = new DateTime(); 
date = DateTime.Parse("1/1/2001"); 

para establecer la fecha, a continuación, utilizar

date.ToShortDateString(); 

o

date.Year; 
date.Month; 
date.Day; 

a obtener lo que necesita. ¡Espero que ayude!

1

Como se mencionó antes DateTime siempre tendrá una fecha y una parte de tiempo del mismo, si sólo desea una sola pieza usar el modo descrito por las demás

DateTime date = DateTime.Parse("2009-11-30); 
date.Year; = 2009 
date.Month; = 11 
date.Day; = 30 
date.Hour; = 0 
and so on 

Lo que debe tener en cuenta es que todos estos métodos solo devolverán un número entero.

Si desea conocer todas las formas posibles de analizar una cadena, John Sheehan ha creado un gran Cheat Sheet wit all possible ways to parse and manipulate dates, y otras cadenas para el caso.

0

Es muy peligroso suponer que la parte de fecha de DateTime es necesariamente la fecha que está esperando. Como se señaló, DateTime siempre incluye y considera el aspecto del tiempo, incluso cuando no lo ve.

Este es un gran problema cuando tiene datos almacenados en diferentes zonas horarias (y especialmente si no se conserva el conocimiento de esa compensación, porque se supone que lo que se almacena es una Fecha, no una fecha, -hora).

Puede almacenar una fecha de nacimiento como '01/01/2000 00:00:00 'durante el horario de verano, que luego se almacena en UCT como '31/12/1999 23:00:00'. Cuando luego lee esa fecha de nacimiento más tarde, la porción de fecha ahora es un día antes.

Es mejor crear su propio tipo. Es extraño que Microsoft no creyera que valga la pena tener un tipo Date.