2010-12-11 33 views
10

Estoy intentando crear una cadena del objeto DateTime que da el formato mm:dd:yyyy.Eliminar horas: segundos: milisegundos en el objeto DateTime

Convencionalmente el objeto DateTime viene como mm:dd:yyyy hrs:min:sec AM/PM.

¿Hay alguna manera de eliminar rápidamente la parte hrs:min:sec AM/PM del DateTime para que cuando lo convierta ToString() solo resulte en mm:dd:yyyy?

+0

que conoces hemos conseguido una respuesta correcta :) Solo quería invitarte a esta página: http://msdn.microsoft.com/en-us/library/az4se3k1(v=VS.100).aspx It's a gre en resource for date-formatting que suelo usar :) – Mantisen

+3

* Convencionalmente el objeto DateTime viene como mm: dd: aaaa hrs: min: sec AM/PM. * - No, no lo hace. ¡Esa sería una decisión de diseño ** horrible ** si así fuera! Creo que te olvidas de que el resultado de DateTime.ToString depende de tu cultura actual. –

Respuesta

10

Para responder a su pregunta, no, tendría que almacenarla en un tipo diferente. La opción más simple es usar una cadena.

string date = dateTime.ToString("MM:dd:yyyy"); 

Sin embargo, también recomiendo no almacenar las fechas internamente en el programa como cadenas. Esto hará que sea difícil hacer cálculos o comparaciones sobre ellos. Además, le aconsejo que no fuerce una cultura específica para la representación de su fecha, ya que significa que su aplicación probablemente no funcionará como se espera en otras culturas que no sea la suya.

Un enfoque un poco más sofisticado es crear una clase personalizada que anule ToString. También evitaría esto, porque aún será difícil usar tu tipo con las funciones de biblioteca estándar. Tendrá que convertir de ida y vuelta todo el tiempo.

Simplemente déjelo como DateTime y realice la conversión a cadena solo en la capa de presentación. Puede usar DateTime.ToShortDateString para imprimir una cadena de cultura amigable para el usuario.

+0

El OP dijo que estaba creando una cadena, por lo que creo que debería haber dicho Sí, en su respuesta :-D – inspite

+0

Me gusta esta solución porque la necesito como una cadena cuando consulto un servicio web externo :) – locoboy

+0

No intente ¡convierta un datetime a la secuencia para manipularlo! Esta es una mala forma y mucho más lenta que construir la hora actual desde sus componentes. – Dave

6
DateTime date1 = new DateTime(2008, 6, 1, 7, 47, 0); 
Console.WriteLine(date1.ToString()); 

// Get date-only portion of date, without its time. 
DateTime dateOnly = date1.Date; 
// Display date using short date string. 
Console.WriteLine(dateOnly.ToString("d")); 
// Display date using 24-hour clock. 
Console.WriteLine(dateOnly.ToString("g")); 
Console.WriteLine(dateOnly.ToString("MM/dd/yyyy HH:mm")); 
// The example displays the following output to the console: 
//  6/1/2008 7:47:00 AM 
//  6/1/2008 
//  6/1/2008 12:00 AM 
//  06/01/2008 00:00 

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

7

Por lo general, estoy usando DateTime.ToShortDateString() para convertir de manera -conscientes Culture en una cadena.

De esta forma, puede formatearlo hasta la fecha solo respetando el formato actual del conjunto de cultivos al hilo actual.

+1

+1 para 'DateTime.ToShortDateString()'. Estaba escribiendo eso en mi respuesta, y luego me di cuenta de que también publicaste la misma sugerencia exacta. –

+0

Guau, un 153-er superó un 100379-er. Debe ser mi día de suerte :-). ¡Gracias! –

9
datetime DateWithTimeNoSeconds = 
DateTime.Now.Date.AddHours(DateTime.Now.Hour).AddMinutes(DateTime.Now.Minute); 

Esto tiene fecha la fecha actual & de tiempo y añade horas y minutos.

+11

Deberías hacer 'DateTime.Now' solo una vez, guardar el resultado en una variable y usar esa variable, de lo contrario te arriesgas a construir un' DateWithTimeNoSeconds' que está a una hora de inactividad, o incluso un día libre (si se usa en el cambio de hora/día). Ejemplo: 'var now = DateTime.Now; now = new DateTime (now.Year, now.Month, now.Day, now.Hour, now.Minute, 0); ' –

2

Aproximadamente DateTime.AddMinutes (o segundos o horas) si quiere QUITAR en lugar de agregar solo agregue un número negativo!

6

Si bien en la mayoría de los casos estoy de acuerdo con Mark Byers, tuve una situación en la que necesitaba almacenar una fecha que solo era granular a la hora. Almacenar minutos y segundos no solo sería superfluo, sino también inexacto. El usuario simplemente seleccionó una fecha y una hora, por lo que, si bien la fecha y la hora serían seleccionadas por el usuario, los minutos y segundos se establecerían en la hora actual.

En este caso, quitar minutos y segundos es muy fácil. Aquí está el código:

scheduledDate = scheduledDate.AddMinutes(
    scheduledDate.Minute * -1).AddSeconds(
    scheduledDate.Second * -1); 

Luego lo almaceno en la base de datos como una fecha completa, con minutos y segundos siempre 0.

+0

Esta es probablemente la mejor manera de aplanar los tiempos de las fechas. –

0

manera fácil, probablemente no es la mejor, pero

DateTime dt = new DateTime(); 
     dt = DateTime.Now; 
     string sdate = dt.ToShortDateString(); 
     dt = DateTime.Parse(sdate); 

O por sus siglas en

DateTime DateTimeWithOut_HoursMinutesSecondsEct = DateTime.Parse(DateTime.Now.ToShortDateString()); 
0

algo como esto por fecha y hora, sin segundos:

private DateTime _startTime; 
public DateTime StartTime 
{ 
    get { return _startTime; } 
    set 
    { 
     _startTime = value.AddSeconds(-value.Second) 
          .AddMilliseconds(-value.Millisecond); 
    } 
} 
Cuestiones relacionadas