2010-12-11 15 views
10

Sto provando a creare una stringa dall'oggetto DateTime che restituisce il formato mm:dd:yyyy.Rimuovi ore: secondi: millisecondi nell'oggetto DateTime

Convenzionalmente l'oggetto DateTime si presenta come mm:dd:yyyy hrs:min:sec AM/PM.

C'è un modo per rimuovere rapidamente la porzione hrs:min:sec AM/PM di DateTime in modo che quando lo converto ToString() comporterà solo mm:dd:yyyy?

+0

Sai hai ottenuto una risposta corretta :) Volevo solo suggerirti di questa pagina: http://msdn.microsoft.com/en-us/library/az4se3k1(v=VS.100).aspx È un gre a risorsa per la formattazione della data che di solito uso :) – Mantisen

+3

* Convenzionalmente l'oggetto DateTime si presenta come mm: gg: aaaa hrs: min: sec AM/PM. * - No, non lo è. Sarebbe una decisione di design ** orribile ** se lo facesse! Penso che tu stia dimenticando che l'output di DateTime.ToString dipende dalla tua cultura corrente. –

risposta

10

Per rispondere alla tua domanda, no, dovresti memorizzarlo in un altro tipo. La scelta più semplice è usare una stringa.

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

Tuttavia, sconsiglio vivamente di non memorizzare le date internamente nel programma come stringhe. Ciò renderà difficile fare qualsiasi calcolo o confronto su di essi. Inoltre ti consiglierei di forzare una cultura specifica per la tua rappresentazione della data in quanto significa che la tua applicazione probabilmente non funzionerà come previsto in altre culture rispetto alla tua.

Un approccio leggermente più sofisticato è quello di creare una classe personalizzata che sovrascriva ToString. Eviterei anche questo, perché sarà ancora difficile usare il tuo tipo con le funzioni della libreria standard. Dovrai convertire avanti e indietro tutto il tempo.

Basta lasciarlo come un DateTime e fare la conversione in stringa solo nel livello di presentazione. È possibile utilizzare DateTime.ToShortDateString per stampare una stringa compatibile con la cultura.

+0

L'OP ha detto che stava creando una stringa, quindi penso che avresti dovuto dire Sì, nella tua risposta MrGreen – inspite

+0

Mi piace questa soluzione perché ho bisogno di una stringa quando si esegue una query su un webservice esterno :) – locoboy

+0

Non provare a convertire un datetime in stringa per manipolarlo! Questa è una cattiva forma e molto più lenta rispetto alla creazione della data corrente dai suoi componenti. – 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

Di solito, sto usando DateTime.ToShortDateString() per convertire in modo -consapevoli Culture in una stringa.

In questo modo, è possibile formattare la data solo rispettando la formattazione corrente della cultura impostata sul thread corrente.

+1

+1 per 'DateTime.ToShortDateString()'. Stavo solo scrivendo questo nella mia risposta, e poi ho notato che hai postato anche lo stesso identico suggerimento. –

+0

Wow, un 153-er ha superato un 100379-er. Deve essere il mio giorno fortunato :-). Grazie! –

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

Questo ottiene la data corrente del tempo la data e aggiunge & ore e minuti.

+11

Si dovrebbe fare 'DateTime.Now' una sola volta, salvare il risultato in una variabile e usare quella variabile, altrimenti si rischia di costruire un' DateWithTimeNoSeconds' che è un'ora off, o anche un giorno off (se usato al turno del ora/giorno). Esempio: 'var now = DateTime.Now; now = new DateTime (now.Year, now.Month, now.Day, now.Hour, now.Minute, 0); ' –

2

Informazioni su DateTime.AddMinutes (o secondi o ore) se si desidera rimuovere invece di aggiungere solo aggiungere un numero negativo!

6

Mentre nella maggior parte dei casi sono d'accordo con Mark Byers, ho avuto una situazione in cui avevo bisogno di memorizzare una data che era sempre granulare all'ora. Memorizzare minuti e secondi non solo sarebbe superfluo, ma anche impreciso. L'utente ha semplicemente selezionato una data e un'ora, quindi mentre la data e l'ora sarebbero state selezionate dall'utente, i minuti e i secondi sarebbero stati impostati su qualunque fosse l'ora corrente.

La rimozione di minuti e secondi è molto semplice in questo caso. Ecco il codice:

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

Quindi lo memorizzo nel DB come ora completa, con minuti e secondi sempre 0.

+0

Questo è probabilmente il modo migliore per appiattire le date. –

0

modo semplice, probabilmente non è la migliore, ma

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

o per brevi

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

qualcosa di simile per la data e l'ora senza secondi:

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