Jak uzyskać tylko czas od daty C # [zamknięte]


144

Załóżmy, że mam wartość 6/22/2009 10:00:00. Jak uzyskać tylko 10:00 od tej daty.


15
Czy to jest ciąg znaków czy DateTime?
Colin Burnett

Odpowiedzi:


202

Masz na to wiele opcji:

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

Pomocne łącze: wzorce DateTime.ToString ()


16
@MetroSmurf - OP nie jest oczywiście jasne, co chce zrobić. Jedną z moich ulubionych czworonogów jest zbyt wczesne chodzenie na sznurki. Miałem kolegę, który przerobił wszystko na struny - nawet podwojone itp. To wypadek, który czeka, żeby się wydarzyć. Powiedziałbym, że nie konwertuj obiektów na łańcuchy, dopóki nie chcesz wyświetlić obiektu człowiekowi. Do tego czasu trzymaj się przedmiotów.
paul

1
Dla szybkiego odniesienia, ssto sekundy z zerem wiodącym i ssekundy bez
Beevee

najlepsza jak dotąd odpowiedź
Tk1993

76

Od a DateTimemożesz użyć .TimeOfDay- ale to daje TimeSpanreprezentację czasu w ciągu dnia (10 godzin).


lub przypadki specjalne z Formatting on ToString („kody formatu”)
kenny

61

W języku C # występuje tylko typ DateTime i składa się z części zawierającej datę i godzinę. Jeśli nie zależy Ci na części Date w DateTime, ustaw ją na wartość domyślną w następujący sposób:

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

W ten sposób możesz zachować spójność we wszystkich wersjach .NET, nawet jeśli Microsoft zdecyduje się zmienić datę bazową na inną niż 01.01.10001.


19
To powinna być akceptowana odpowiedź. Chodziło o wyodrębnienie czasu z DateTime, a nie formatowanie go jako ciągu.
ASalazar

W szczególności jest „w .NET”, a nie „w C #”.
rory.ap

22

Warto przyjrzeć się metodzie DateTime.ToShortTimeString () .

Ponadto istnieje wiele innych metod i właściwości obiektu DateTime, które mogą pomóc w sformatowaniu daty lub godziny w dowolny sposób. Wystarczy spojrzeć na dokumentację.


+1 Jest to najczystsze rozwiązanie, jeśli pracujesz w międzynarodowym środowisku z wymogiem lokalizacji wyjścia czasu, ponieważ zwraca czas w jakimkolwiek formacie, na jaki został ustawiony bieżący system.
aggaton


6

Można to zrobić na różne sposoby. Możesz użyć, DateTime.Now.ToLongTimeString()który zwraca tylko czas w formacie ciągu.


Prawdopodobnie miałeś na myśli DateTime.ToLongTimeString()raczej niż DateTime.Now.ToLongTimeString(). Biorąc pod uwagę wiek tego wątku, najlepiej go nie wskrzeszać, chyba że reakcja przyczyni się do znacznej poprawy w stosunku do poprzednich odpowiedzi.
Leigh,

5

Możesz po prostu napisać

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

4
to absolutnie nic nie dodaje do tego, co zostało zgłoszone ponad 4 lata temu!
paul

5

Możesz tego użyć

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

Jest to czas rzeczywisty z wartością milisekund i ustawiany tylko na czas.


TimeOfDay to dobry sposób, ale przynosi również część milisekundową, więc musisz sformatować swój czas standardowym typem.
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

To działa dla mnie. Odkryłem to, gdy musiałem pracować z DateTime.Date, aby uzyskać tylko część dotyczącą daty.

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

3

Możesz używać ToString("T")przez długi czas lub ToString("t")przez krótki czas.


2

jeśli korzystasz z widoku siatki, możesz wyświetlić tylko czas na DataFormatString="{0:t}" przykładzie:

    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

Jeśli chcesz porównać czasy, a nie daty, możesz po prostu mieć standardową datę porównania lub dopasować do używanej daty, na przykład ...

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

Być może są na to lepsze sposoby, ale daty są zgodne.


1

Musisz również wziąć pod uwagę rodzaj DateTime.

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

Nie ma sensu odpowiadać na to pytanie, które padło 9 lat temu. Również na to pytanie jest już wiele dobrych odpowiedzi.
benshabatnoam

Nie oddajesz czasu. Powinieneś przejrzeć swoją odpowiedź
Yepeekai

@Yepeekai W .NET nie ma klasy Time. Dlatego instancja DateTime bez części Date jest jedną z opcji, które możesz zrobić. Możesz również zwrócić ciąg, ale możesz go użyć w operacjach DateTime. Wydaje mi się, że możesz również rozważyć TimeSpan.
user3720899

imo „new DateTime (d.TimeOfDay.Ticks)” jest jak dotąd najczystszą odpowiedzią
Fabianus
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.