2011-02-09 13 views
7

Ho un oggetto temporizzato che deve contenere solo il tempo, senza data. UsereiMemorizzazione dell'ora corrente senza componente millisecondi

DateTime.Now.TimeOfDay 

ma il problema è che dà il tempo nel formato

15:51:51.7368329 

Non voglio la componente millisecondi. Come posso eliminarlo?

+1

Dove lo stai conservando? – Oded

+4

Si tratta di visualizzazione per l'utente o è veramente necessario trasformarlo in un altro intervallo di tempo con il componente in millisecondi rimosso? – Ani

+0

sì, immagino sia solo per la visualizzazione, quindi andrò semplicemente con il metodo ToString() – xbonez

risposta

10

È possibile utilizzare le proprietà DateTime.Now.Hour/Minute/Second oppure è possibile utilizzare DateTime.Now.ToString("HH:mm:ss").

consultare qui per ulteriori informazioni: http://msdn.microsoft.com/en-us/library/zdtaw1bw.aspx

+0

"h: mm: ss" non darà il risultato desiderato. 'h' rappresenta la rappresentazione a 1 cifra delle ore non militari e' mm' rappresenta la rappresentazione a 2 cifre del mese corrente. Pertanto, questo darebbe 3:02:51 per l'esempio fornito, invece di 15:51:51, come richiesto. –

+0

Penso che dovresti dare un'occhiata a questo link http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx –

+1

Penso che MM rappresenti il ​​mese, mentre mm rappresenta i minuti. – xbonez

4

Se il problema è la visualizzazione, è possibile fare questo:

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

http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx Secondo .NET. MM rappresenta il mese e non il minuto. –

+0

@Mohib: hai assolutamente ragione. Aggiornato di conseguenza. Grazie. –

6

sufficiente sottrarre via la parte millisecondo:

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

Potrebbe essere fatto in meno codice, senza prima assegnando a myTime:

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

Anche se un po elegante, è una cattiva idea. Quando si accede a TimeOfDay due volte, è possibile che a un certo punto sia passato un altro millisecondo prima del secondo accesso. In quel caso il risultato non sarebbe zero millisecondi.

+0

la tua prima riga non verrà compilata. –

8

Credo che questo è ciò che si può essere dopo:

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

Preferisco questo per andare a una stringa e tornare indietro. – KeithS

+1

Per quanto riguarda le prestazioni, penso che il suggerimento di mrcrowl sia meglio che stringere e tornare. Penso che sia circa 9 volte più veloce (entrambi sono però veloci). –

1

È possibile utilizzare questa funzione per controllare ciò che si adatta formato:

DateTime.Now.GetDateTimeFormats(); 

Questo vi darà tutte le formati come:

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

Si può fare questo-

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

lavorato per me :).

Problemi correlati