2012-06-29 13 views
27

Desidero recuperare la data di ieri nella mia applicazione Web ASP.NET utilizzando C#.come ottenere la data di ieri in C#

Ho già analizzato l'argomento ma credo di non essere in grado di capirlo.

codice che sto usando è solo mi dà data odierna

 string yr = DateTime.Today.Year.ToString(); 
     string mn = DateTime.Today.Month.ToString(); 
     string dt = DateTime.Today.Day.ToString(); 
     date = string.Format("{0}-{1}-{2}", yr, mn, dt); 

Come posso fare così?

Grazie in anticipo :)

risposta

74

Usa DateTime.AddDays() metodo con il valore della -1

var yesterday = DateTime.Today.AddDays(-1); 

che vi darà: {6/28/2012 12:00:00 AM}

È inoltre possibile utilizzare

DateTime.Now.AddDays(-1) 

Ciò fornirà la data precedente con l'ora corrente, ad es. {6/28/2012 10:30:32 AM}

+0

Thanks a Lot :) – akhil

+0

@akhil, siete i benvenuti – Habib

3

Qualcosa del genere dovrebbe funzionare

var yesterday = DateTime.Now.Date.AddDays(-1); 

DateTime.Now ti dà la data e l'ora corrente .

Se si desidera rimuovere l'elemento orario, aggiungere .Date lo vincola alla data, ad esempio il tempo è 00:00:00.

Infine .AddDays(-1) rimuove 1 giorno per darti ieri.

+1

Perché non usare DateTime.Today? – ZafarYousafi

+0

E 'quello che mi è venuto in mente quando ho risposto a una risposta. Non riesco a immaginare che ci sia una differenza nella realtà. Inoltre skim ha letto la domanda e non ha visto DateTime.Today era già in uso. La parte importante id '.AddDays (-1)' –

+3

@ZafarYousafi Ho pensato di attivare il reflector per vedere se ci fosse una differenza nell'implementazione di 'DateTime.Now.Date' e' DateTime.Today'. Risulta che il metodo 'Today' è solo un wrapper e restituisce' Now.Date'. Quindi se 'Today' chiama' Now.Date', forse la differenza è 'Today' è meno performante; in quanto è una chiamata in 2 passaggi per ottenere lo stesso risultato. –

4

Otterrai la data di ieri con questo seguente frammento di codice.

DateTime dtYesterday = DateTime.Now.Date.AddDays(-1); 
11

Il codice che hai postato è sbagliato.

Non effettuare chiamate multiple a DateTime.Today. Se ti capita di eseguire quel codice così come la data cambia, potresti ottenere risultati completamente sbagliati. Ad esempio, se lo hai eseguito il 31 dicembre 2011 potresti ricevere "2011-1-1".

Utilizzare una singola chiamata a DateTime.Today quindi utilizzare ToString con una stringa di formato appropriata per formattare la data come desiderato.

string result = DateTime.Today.AddDays(-1).ToString("yyyy-MM-dd"); 
+0

Qual è la probabilità che ciò accada? 1 su 31536000 secondi in un anno non bisestile. Questo diventa i (iota). –

+13

Potrebbe trattarsi di un bug raro, ma il punto principale è perché scrivere quattro righe di codice errato quando è possibile scrivere correttamente in una riga? –

+0

Il mio tipo di variabile è 'DateTime'. Cosa fare allora? – barnes

1
string result = DateTime.Now.Date.AddDays(-1).ToString("yyyy-MM-dd"); 
+0

Qualunque buona ragione per utilizzare DateTime.Now.Date al posto di Date.Today? – ZafarYousafi

+0

Non va bene. Entrambi restituiscono lo stesso valore. – akhil

0

DateTime.Today quanto implica è la data di oggi ed è necessario per ottenere la data di un giorno prima in modo da sottrarre un giorno utilizzando AddDays(-1);

Ci sono sufficienti opzioni disponibili in DateTime per ottenere la formattazione come ToShortDateString in base alla propria cultura e non è necessario concatenarle singolarmente.

Inoltre è possibile avere un formato desiderabile nella versione .ToString() dell'istanza DateTime

3

Non hai bisogno di chiamare più volte DateTime.Today, basta utilizzare il tempo unico e formattare l'oggetto data nel formato desiderio .. come quella

string result = DateTime.Now.Date.AddDays(-1).ToString("yyyy-MM-dd"); 

O

string result = DateTime.Today.AddDays(-1).ToString("yyyy-MM-dd"); 
Problemi correlati