2011-02-09 9 views
7

Tengo un objeto de intervalo de tiempo que debe contener solo el tiempo, sin fecha. Me gustaría utilizarAlmacenamiento del tiempo actual sin componente de milisegundos

DateTime.Now.TimeOfDay 

pero el problema es que da tiempo en el formato

15:51:51.7368329 

no quiero que el componente de milisegundos. ¿Cómo puedo recortarlo?

+1

¿Dónde la estás almacenando? – Oded

+4

¿Se trata de visualización para el usuario, o realmente necesita convertir esto en otra oportunidad con el componente de milisegundos eliminado? – Ani

+0

Sí, supongo que solo se trata de mostrar, así que simplemente voy con el método ToString() – xbonez

Respuesta

10

Puede usar las propiedades DateTime.Now.Hour/Minute/Second o puede usar DateTime.Now.ToString("HH:mm:ss").

Consulte aquí para obtener más información: http://msdn.microsoft.com/en-us/library/zdtaw1bw.aspx

+0

La "h: mm: ss" no dará el resultado deseado. 'h' representa la representación de 1 dígito de horas no militares, y' mm' representa la representación de 2 dígitos del mes actual. Por lo tanto, esto daría 3:02:51 para el ejemplo proporcionado, en lugar de 15:51:51, según lo solicitado. –

+0

Creo que debería echar un vistazo a este enlace http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx –

+1

Creo que MM representa el mes, mientras que mm representa los minutos. – xbonez

4

Si el problema es mostrándolo, puede hacer esto:

DateTime.Now.ToString("HH:mm:ss") 
+0

http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx Según .NET .. MM representa el mes y no el minuto. –

+0

@ Mohib: tienes toda la razón. Actualizado en consecuencia. Gracias. –

6

Simplemente reste la parte en milisegundo:

DateTime myTime = DateTime.Now.TimeOfDay; 
myTime = myTime.AddMilliseconds(-myTime.Millisecond); 

Se podría hacer en menos código, sin primero asignar a myTime:

DateTime myTime = DateTime.Now.TimeOfDay.AddMilliseconds(
    -DateTime.Now.TimeOfDay.Millisecond); 

Aunque un poco elegante, que es una mala idea. Al acceder al TimeOfDay dos veces, existe la posibilidad de que en algún momento haya pasado otro milisegundo antes del segundo acceso. En ese caso, el resultado no sería de cero milisegundos.

+0

su primera línea no se compilará. –

8

Creo que esto es lo que usted puede estar después:

TimeSpan timeNow = DateTime.Now.TimeOfDay; 
TimeSpan trimmedTimeNow = new TimeSpan(timeNow.Hours, timeNow.Minutes, timeNow.Seconds); 
+1

Prefiero que esto vaya a una cadena y viceversa. – KeithS

+1

En lo que respecta al rendimiento, creo que la sugerencia de mrcrowl es mejor que para encadenar y volver. Creo que es aproximadamente 9 veces más rápido (sin embargo, ambos son rápidos). –

1

Puede utilizar esta función para comprobar qué trajes formato que:

DateTime.Now.GetDateTimeFormats(); 

esto le dará todos los formatos como:

  • "14/05/2011"
  • "14/05/11"
  • "14.05.11"
  • "14-05-11"
  • "2011-05-14"
  • etc.
0

Usted puede hacer esto:

DateTime.Parse(
       DateTime.Now.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss"), 
       System.Globalization.CultureInfo.CurrentCulture 
      ); 

trabajado para mí :).

Cuestiones relacionadas