Come ottenere solo ora dalla data-ora C # [chiuso]


144

Supponiamo che io abbia il valore 22/06/2009 10:00:00. Come posso ottenere solo le 10:00 da questa data.


15
È una stringa o un DateTime?
Colin Burnett,

Risposte:


202

Hai molte opzioni per questo:

DateTime dt = DateTime.Parse("6/22/2009 07:00:00 AM");

dt.ToString("HH:mm"); // 07:00 // 24 hour clock // hour is always 2 digits
dt.ToString("hh:mm tt"); // 07:00 AM // 12 hour clock // hour is always 2 digits
dt.ToString("H:mm"); // 7:00 // 24 hour clock
dt.ToString("h:mm tt"); // 7:00 AM // 12 hour clock

Link utile: Pattern DateTime.ToString ()


16
@MetroSmurf - l'OP, ovviamente, non chiarisce cosa vuole fare. Uno dei miei odori da compagnia è andare presto alle corde. Ho avuto un collega che ha convertito tutto in stringa - anche raddoppiato, ecc. È un incidente in attesa di accadere. Direi di non convertire gli oggetti in stringhe fino a quando non si desidera visualizzare l'oggetto in un essere umano. Fino ad allora attenersi agli oggetti.
paul

1
Per una rapida sss
consultazione

migliore risposta finora
Tk1993

76

Da a DateTime, puoi usare .TimeOfDay- ma questo ti dà una TimeSpanrappresentazione dell'ora del giorno (10 ore).


o casi speciali con Formattazione su ToString ("codici formato")
kenny,

61

Esiste solo il tipo DateTime in C # ed è composto sia dalla parte di data che da quella dell'ora. Se non ti interessa la parte Date di DateTime, impostala sul valore predefinito in questo modo:

DateTime myTime = default(DateTime).Add(myDateTime.TimeOfDay)

In questo modo puoi essere coerente in tutte le versioni di .NET, anche se Microsoft decide di cambiare la data di base in qualcosa di diverso da 1/1/0001.


19
Questa dovrebbe essere la risposta accettata. La domanda era estrarre l'ora da un DateTime, non formattarlo come una stringa.
ASalazar,

In particolare, è "in .NET" non "in C #".
rory.ap,

22

Potresti voler esaminare il metodo DateTime.ToShortTimeString () .

Inoltre, ci sono molti altri metodi e proprietà sull'oggetto DateTime che possono aiutarti a formulare la data o l'ora nel modo che preferisci. Dai un'occhiata alla documentazione.


+1 Questa è la soluzione più pulita, se si esegue in un ambiente internazionale con requisiti di localizzazione dell'output temporale, poiché restituisce l'ora in qualunque formato sia stato impostato il sistema corrente.
aggaton


6

Esistono diversi modi per farlo. È possibile utilizzare DateTime.Now.ToLongTimeString()quale restituisce solo l'ora in formato stringa.


Probabilmente intendevi DateTime.ToLongTimeString()piuttosto che DateTime.Now.ToLongTimeString(). Data l'età di questo thread, è meglio non resuscitarlo a meno che la risposta non contribuisca a un miglioramento significativo rispetto alle risposte precedenti.
Leigh,

5

Puoi semplicemente scrivere

string time = dateTimeObect.ToString("HH:mm");

4
questo non aggiunge assolutamente nulla a ciò che è già stato presentato più di 4 anni fa!
paul

5

Puoi usare questo

lblTime.Text = DateTime.Now.TimeOfDay.ToString(); 

È in tempo reale con valore in millisecondi e si imposta solo sul tempo.


TimeOfDay è un buon modo, ma porta anche parte dei millisecondi, è necessario formattare il tempo con il tipo standard.
sajadre,

5
DateTime now = DateTime.Now;

now.ToLongDateString();    // Wednesday, January 2, 2019
now.ToLongTimeString();    // 2:33:59 PM
now.ToShortDateString();   // 1/2/2019
now.ToShortTimeString();   // 2:16 PM
now.ToString();            // 1/2/2019 2:33:59 PM

4

Questo funziona per me. L'ho scoperto quando ho dovuto lavorare con DateTime.Date per ottenere solo la parte della data.

var wholeDate = DateTime.Parse("6/22/2009 10:00:00 AM");
var time = wholeDate - wholeDate.Date;

3

Puoi usarlo ToString("T")per molto tempo o ToString("t")per poco tempo.


2

se stai usando gridview puoi mostrare solo l'ora con l' DataFormatString="{0:t}" esempio:

    By bind the value:-
<asp:Label ID="lblreg" runat="server" Text='<%#Eval("Registration_Time ", "{0:t}") %>'></asp:Label>

By bound filed:-
<asp:BoundField DataField=" Registration_Time" HeaderText="Brithday" SortExpression=" Registration Time " DataFormatString="{0:t}"/>

1

Se stai cercando di confrontare i tempi e non le date, potresti semplicemente avere una data di confronto standard o abbinare la data che stai utilizzando, come in ...

DateTime time = DateTime.Parse("6/22/2009 10:00AM");
DateTime compare = DateTime.Parse(time.ToShortDateString() + " 2:00PM");
bool greater = (time > compare);

Ci possono essere modi migliori per farlo, ma mantiene le date corrispondenti.


1

Devi tenere conto anche di DateTime Kind.

public static DateTime GetTime(this DateTime d)
{
    return new DateTime(d.TimeOfDay.Ticks, d.Kind);
}

Inutile rispondere a questa domanda, è stata posta 9 anni fa. Inoltre ci sono già molte buone risposte a questa domanda.
benshabatnoam,

Non stai tornando l'ora. Dovresti rivedere la tua risposta
Yepeekai,

@Yepeekai Non esiste una classe Time in .NET. Quindi un'istanza di DateTime senza porzione di Date è una delle opzioni che puoi fare. Puoi anche restituire una stringa ma puoi usarla nelle operazioni DateTime. Immagino che potresti prendere in considerazione anche un TimeSpan.
user3720899

imo il "nuovo DateTime (d.TimeOfDay.Ticks)" è la risposta più pulita finora
Fabianus
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.