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.


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 ()


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).


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.


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.


+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


6

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


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");

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.


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

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;

3

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


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}"/>

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.


1

Anda perlu memperhitungkan Jenis Tanggal juga.

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

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.