So erhalten Sie nur die Uhrzeit von Datum und Uhrzeit C # [geschlossen]


144

Angenommen, ich habe den Wert 22.06.2009 10:00:00 Uhr. Wie bekomme ich ab diesem Datum nur 10:00 Uhr.


15
Ist das eine Zeichenfolge oder eine DateTime?
Colin Burnett

Antworten:


201

Sie haben dafür viele Möglichkeiten:

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

Hilfreicher Link: DateTime.ToString () Muster


16
@MetroSmurf - dem OP ist natürlich nicht klar, was er tun will. Einer meiner Lieblingshasse ist es, zu früh zu Fäden zu gehen. Ich hatte einen Kollegen, der alles in String umwandelte - sogar Doppel usw. Es ist ein Unfall, der darauf wartet, passiert zu werden. Ich würde sagen, konvertieren Sie Objekte nicht in Zeichenfolgen, bis Sie das Objekt einem Menschen anzeigen möchten. Bis dahin bleib bei den Objekten.
Paul

1
Zum schnellen Nachschlagen sssind Sekunden mit einer führenden Null unds ist Sekunden ohne
Beevee

beste Antwort bisher
Tk1993

76

Von a DateTimekönnen Sie verwenden .TimeOfDay- aber das gibt Ihnen eine TimeSpanDarstellung der Zeit in den Tag (10 Stunden).


oder Sonderfälle mit Formatierung auf ToString ("Formatcodes")
kenny

61

In C # gibt es nur den DateTime-Typ, der sowohl aus dem Datums- als auch aus dem Zeitanteil besteht. Wenn Sie sich nicht für den Date-Teil von DateTime interessieren, setzen Sie ihn wie folgt auf den Standardwert:

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

Auf diese Weise können Sie in allen Versionen von .NET konsistent sein, auch wenn Microsoft beschließt, das Basisdatum auf etwas anderes als den 1.1.10001 zu ändern.


19
Dies sollte die akzeptierte Antwort sein. Die Frage war, die Zeit aus einer DateTime zu extrahieren und nicht als Zeichenfolge zu formatieren.
ASalazar

Insbesondere ist es "in .NET", nicht "in C #".
rory.ap

22

Vielleicht möchten Sie in DateTime.ToShortTimeString () schauen -Methode .

Es gibt auch viele andere Methoden und Eigenschaften für das DateTime- Objekt, mit denen Sie das Datum oder die Uhrzeit nach Belieben formatieren können. Schauen Sie sich einfach die Dokumentation an.


+1 Dies ist die sauberste Lösung, wenn Sie in einer internationalen Umgebung arbeiten, in der die Zeitausgabe lokalisiert werden muss, da die Zeit in dem Format zurückgegeben wird, auf das das aktuelle System eingestellt wurde.
Aggaton


6

Es gibt verschiedene Möglichkeiten, dies zu tun. Sie können verwenden, DateTime.Now.ToLongTimeString()was nur die Zeit im Zeichenfolgenformat zurückgibt.


Sie meinten wahrscheinlich DateTime.ToLongTimeString()eher als DateTime.Now.ToLongTimeString(). Angesichts des Alters dieses Threads ist es am besten, ihn nicht wiederzubeleben, es sei denn, die Antwort trägt erheblich zur Verbesserung gegenüber früheren Antworten bei.
Leigh

5

Sie können einfach schreiben

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

4
Dies fügt absolut nichts zu dem hinzu, was bereits vor über 4 Jahren eingereicht wurde!
Paul

5

Sie können dies verwenden

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

Es ist Echtzeit mit einem Millisekundenwert und wird nur auf Zeit eingestellt.


TimeOfDay ist ein guter Weg, aber es bringt auch einen Teil von Millisekunden, den Sie benötigen, um Ihre Zeit mit dem Standardtyp zu formatieren.
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

Das funktioniert bei mir. Ich habe es entdeckt, als ich mit DateTime.Date arbeiten musste, um nur den Datumsteil zu erhalten.

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

3

Sie können ToString("T")für lange Zeit oder ToString("t")für kurze Zeit verwenden.


2

Wenn Sie die Rasteransicht verwenden, können Sie nur die Zeit anhand eines DataFormatString="{0:t}" Beispiels anzeigen :

    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

Wenn Sie die Zeiten und nicht die Daten vergleichen möchten, können Sie einfach ein Standardvergleichsdatum festlegen oder mit dem von Ihnen verwendeten Datum übereinstimmen, wie in ...

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

Möglicherweise gibt es bessere Möglichkeiten, aber Ihre Daten stimmen überein.


1

Sie müssen auch DateTime Kind berücksichtigen.

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

Es hat keinen Sinn, diese Frage zu beantworten. Sie wurde vor 9 Jahren gestellt. Auch auf diese Frage gibt es schon viele gute Antworten.
Benshabatnoam

Sie geben die Zeit nicht zurück. Sie sollten Ihre Antwort überprüfen
Yepeekai

@Yepeekai In .NET gibt es keine Zeitklasse. Daher ist eine DateTime-Instanz ohne Date-Teil eine der Optionen, die Sie ausführen können. Sie können auch eine Zeichenfolge zurückgeben, diese können Sie jedoch in DateTime-Vorgängen verwenden. Ich denke, Sie könnten auch eine Zeitspanne in Betracht ziehen.
user3720899

Imo ist die "neue DateTime (d.TimeOfDay.Ticks)" die bisher sauberste Antwort
Fabianus
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.