Cara mendapatkan hanya waktu dari waktu-tanggal C # [ditutup]

144

Misalkan saya memiliki nilai 6/22/2009 10:00:00 AM. Bagaimana saya mendapatkan hanya 10:00 pagi dari waktu tanggal ini.

Tyler Durden
sumber
15
Apakah ini string atau DateTime?
Colin Burnett

Jawaban:

202

Anda memiliki banyak opsi untuk ini:

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

Tautan Bermanfaat: Pola DateTime.ToString ()

Theofanis Pantelides
sumber
16
@MetroSmurf - OP, tentu saja, tidak jelas apa yang ingin dia lakukan. Salah satu peliharaan saya benci adalah pergi ke string ke awal. Saya memiliki seorang kolega yang mengubah segalanya menjadi string - bahkan ganda dll. Ini adalah kecelakaan yang menunggu untuk terjadi. Saya akan mengatakan jangan mengubah objek menjadi string sampai Anda ingin menampilkan objek ke manusia. Sampai saat itu tetap dengan benda.
paul
1
Untuk referensi cepat, ssadalah detik dengan nol di depan dan sdetik tanpa
Beevee
jawaban terbaik sejauh ini
Tk1993
76

Dari a DateTime, Anda dapat menggunakan .TimeOfDay- tetapi itu memberi Anda waktu TimeSpanmewakili ke hari (10 jam).

Marc Gravell
sumber
atau kasus khusus dengan Memformat pada ToString ("kode format")
kenny
61

Hanya ada tipe DateTime di C # dan itu terdiri dari bagian tanggal dan waktu. Jika Anda tidak peduli dengan bagian Tanggal DateTime, atur ke nilai default seperti ini:

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

Dengan cara ini Anda bisa konsisten di semua versi .NET, bahkan jika Microsoft memutuskan untuk mengubah tanggal dasar ke yang lain selain 1/1/0001.

panpawel
sumber
19
Ini harus menjadi jawaban yang diterima. Pertanyaannya adalah untuk mengekstrak waktu dari DateTime, bukan untuk memformatnya sebagai string.
ASalazar
Secara khusus, ini "dalam. NET" bukan "dalam C #".
rory.ap
22

Anda mungkin ingin melihat metode DateTime.ToShortTimeString () .

Juga, ada banyak metode dan properti lain pada objek DateTime yang dapat membantu Anda dalam memformat tanggal atau waktu dengan cara apa pun yang Anda suka. Lihatlah dokumentasinya.

astaga
sumber
+1 Ini adalah solusi terbersih, jika Anda berjalan di lingkungan internasional dengan persyaratan pelokalan waktu keluaran, karena ia mengembalikan waktu dalam format apa pun yang telah diatur oleh sistem saat ini.
aggaton
11

Coba ini:

TimeSpan TodayTime = DateTime.Now.TimeOfDay;
Javier Andres Caicedo
sumber
6

Ada berbagai cara untuk melakukannya. Anda dapat menggunakan DateTime.Now.ToLongTimeString()yang hanya mengembalikan waktu dalam format string.

tarakaram gopal
sumber
Anda mungkin berarti DateTime.ToLongTimeString()bukan DateTime.Now.ToLongTimeString(). Mengingat usia utas ini, sebaiknya jangan menghidupkannya kembali kecuali responsnya menyumbang peningkatan signifikan terhadap jawaban sebelumnya.
Leigh
5

Anda cukup menulis

string time = dateTimeObect.ToString("HH:mm");
Kishan Gupta
sumber
4
ini sama sekali tidak menambah apa pun yang telah diajukan lebih dari 4 tahun yang lalu!
paul
5

Anda bisa menggunakan ini

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

Ini realtime dengan nilai milidetik dan hanya disetel ke waktu.

chrysanly
sumber
TimeOfDay adalah cara yang baik tetapi juga membawa bagian milidetik Anda perlu memformat waktu Anda dengan tipe standar.
sajad
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
Görkem Hacıoğlu
sumber
4

Ini bekerja untuk saya. Saya menemukannya ketika saya harus bekerja dengan DateTime.Date untuk mendapatkan hanya bagian tanggal.

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

Anda dapat menggunakan ToString("T")untuk waktu yang lama atau ToString("t")untuk waktu yang singkat.

tikar tikar
sumber
2

jika Anda menggunakan gridview maka Anda hanya dapat menunjukkan waktu dengan DataFormatString="{0:t}" contoh:

    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}"/>
Bipul Roy
sumber
1

Jika Anda ingin membandingkan waktu, dan bukan tanggal, Anda bisa saja memiliki tanggal perbandingan standar, atau cocok dengan tanggal yang Anda gunakan, seperti di ...

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

Mungkin ada cara yang lebih baik untuk ini, tetapi tetap cocokkan tanggal Anda.

Hugoware
sumber
1

Anda perlu memperhitungkan Jenis Tanggal juga.

public static DateTime GetTime(this DateTime d)
{
    return new DateTime(d.TimeOfDay.Ticks, d.Kind);
}
pengguna3720899
sumber
Tidak ada gunanya menjawab pertanyaan ini, ditanyakan 9 tahun lalu. Juga ada banyak jawaban bagus untuk pertanyaan ini.
benshabatnoam
Anda tidak mengembalikan waktu. Anda harus meninjau jawaban Anda
Yepeekai
@Yepeekai Tidak ada kelas Waktu di .NET. Jadi instance DateTime tanpa bagian Tanggal adalah salah satu opsi yang dapat Anda lakukan. Anda juga dapat mengembalikan string tetapi Anda bisa menggunakannya dalam operasi DateTime. Saya kira Anda dapat mempertimbangkan TimeSpan juga.
user3720899
imo the "DateTime baru (d.TimeOfDay.Ticks)" adalah jawaban terbersih sejauh ini
Fabianus