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.