Cách nhận thời gian chỉ từ thời gian ngày C # [đã đóng]


144

Giả sử tôi có giá trị 6/22/2009 10:00:00 AM. Làm thế nào để tôi chỉ nhận được 10:00 sáng kể từ ngày này.


15
Đây là một chuỗi hay một DateTime?
Colin Burnett

Câu trả lời:


202

Bạn có nhiều lựa chọn cho việc này:

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

Liên kết hữu ích: Các mẫu DateTime.ToString ()


16
@MetroSmurf - OP, tất nhiên, không rõ anh ấy muốn làm gì. Một trong những thú cưng của tôi ghét là đi dây sớm. Tôi đã có một đồng nghiệp đã chuyển đổi mọi thứ thành chuỗi - thậm chí gấp đôi, v.v ... Đó là một tai nạn đang chờ xảy ra. Tôi sẽ nói đừng chuyển đổi đối tượng thành chuỗi cho đến khi bạn muốn hiển thị đối tượng thành người. Cho đến khi đó gắn bó với các đối tượng.
paul

1
Để tham khảo nhanh, sslà giây có số 0 đứng đầu và slà giây không có
Beevee

câu trả lời hay nhất từ ​​trước đến nay
Tk1993

76

Từ a DateTime, bạn có thể sử dụng .TimeOfDay- nhưng điều đó mang lại cho bạn một TimeSpanđại diện cho thời gian trong ngày (10 giờ).


hoặc các trường hợp đặc biệt với Định dạng trên ToString ("mã định dạng")
kenny

61

Chỉ có loại DateTime trong C # và nó bao gồm cả phần ngày và giờ. Nếu bạn không quan tâm đến phần Ngày của DateTime, hãy đặt nó thành giá trị mặc định như thế này:

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

Bằng cách này, bạn có thể thống nhất trên tất cả các phiên bản .NET, ngay cả khi Microsoft quyết định thay đổi ngày cơ sở thành ngày khác 1/1/0001.


19
Đây phải là câu trả lời được chấp nhận. Câu hỏi là trích xuất thời gian từ DateTime, không định dạng nó dưới dạng chuỗi.
ASalazar

Cụ thể, đó là "trong .NET" chứ không phải "trong C #".
rory.ap

22

Bạn có thể muốn xem xét phương thức DateTime.ToShortTimeString () .

Ngoài ra, có nhiều phương thức và thuộc tính khác trên đối tượng DateTime có thể giúp bạn hình thành ngày hoặc thời gian theo bất kỳ cách nào bạn muốn. Chỉ cần xem tài liệu.


+1 Đây là giải pháp sạch nhất, nếu bạn đang chạy trong môi trường quốc tế với yêu cầu nội địa hóa đầu ra thời gian, vì nó trả về thời gian ở bất kỳ định dạng nào mà hệ thống hiện tại đã được đặt.
aggaton


6

Có nhiều cách khác nhau để làm như vậy. Bạn có thể sử dụng DateTime.Now.ToLongTimeString()chỉ trả về thời gian ở định dạng chuỗi.


Bạn có thể có ý DateTime.ToLongTimeString()hơn là DateTime.Now.ToLongTimeString(). Với độ tuổi của chủ đề này, tốt nhất không nên hồi sinh nó trừ khi phản hồi đóng góp một sự cải thiện đáng kể so với các câu trả lời trước đó.
Leigh

5

Bạn chỉ có thể viết

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

4
điều này hoàn toàn không có gì với những gì đã được gửi hơn 4 năm trước!
paul

5

Bạn có thể sử dụng cái này

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

Đó là thời gian thực với giá trị mili giây và nó chỉ đặt thành thời gian.


TimeOfDay là một cách tốt nhưng nó cũng mang lại một phần triệu giây mà bạn cần định dạng thời gian của mình với loại tiêu chuẩn.
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

Điều này làm việc cho tôi. Tôi đã phát hiện ra nó khi tôi phải làm việc với DateTime.Date để chỉ lấy phần ngày.

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

3

Bạn có thể sử dụng ToString("T")trong thời gian dài hoặc ToString("t")trong thời gian ngắn.


2

nếu bạn đang sử dụng Gridview thì bạn chỉ có thể hiển thị thời gian với DataFormatString="{0:t}" ví dụ:

    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

Nếu bạn đang tìm cách so sánh thời gian chứ không phải ngày, bạn có thể có một ngày so sánh tiêu chuẩn hoặc khớp với ngày bạn đang sử dụng, như trong ...

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

Có thể có những cách tốt hơn để làm điều này, nhưng giữ cho ngày của bạn phù hợp.


1

Bạn cũng cần phải có tài khoản cho DateTime Kind.

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

Không có điểm để trả lời câu hỏi này, nó đã được hỏi 9 năm trước. Ngoài ra có rất nhiều câu trả lời tốt cho câu hỏi này.
benshabatnoam

Bạn không trả lại thời gian. Bạn nên xem lại câu trả lời của mình
Yepeekai

@Yepeekai Không có lớp Time trong .NET. Vì vậy, một ví dụ DateTime không có phần Ngày là một trong những tùy chọn bạn có thể làm. Bạn cũng có thể trả về một chuỗi nhưng bạn có thể sử dụng chuỗi đó trong các hoạt động DateTime. Tôi đoán bạn cũng có thể xem xét một TimeSpan.
dùng3720899

imo "DateTime mới (d.TimeOfDay.Ticks)" là câu trả lời rõ ràng nhất cho đến nay
Fabianus
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.