วิธีรับเฉพาะเวลาจากวันที่และเวลา C # [ปิด]


144

สมมติว่าฉันมีค่า 6/22/2009 10:00:00 AM ฉันจะได้รับเพียง 10:00 น. จากเวลาวันที่นี้


15
นี่คือสตริงหรือ DateTime หรือไม่?
Colin Burnett

คำตอบ:


202

คุณมีตัวเลือกมากมายสำหรับสิ่งนี้:

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

ลิงค์ที่มีประโยชน์: รูปแบบ DateTime.ToString ()


16
@ MetroSmurf - OP คือแน่นอนไม่ชัดเจนว่าเขาต้องการทำอะไร หนึ่งในสัตว์เลี้ยงของฉันไม่ชอบคือไปที่สายไปก่อน ฉันมีเพื่อนร่วมงานที่เปลี่ยนทุกอย่างเป็นสาย - แม้แต่คู่ ฯลฯ มันเป็นอุบัติเหตุที่รอให้เกิดขึ้น ฉันจะบอกว่าอย่าแปลงวัตถุเป็นสตริงจนกว่าคุณจะต้องการแสดงวัตถุเป็นมนุษย์ จนกระทั่งติดกับวัตถุ
paul

1
สำหรับการอ้างอิงอย่างรวดเร็วssคือวินาทีที่มีศูนย์นำหน้าและsเป็นวินาทีที่ไม่มี
Beevee

คำตอบที่ดีที่สุดจนถึงวันนี้
Tk1993

76

จาก a DateTimeคุณสามารถใช้.TimeOfDay- แต่นั่นจะให้เวลาTimeSpanแทนวัน (10 ชั่วโมง)


หรือกรณีพิเศษที่มีการจัดรูปแบบใน ToString ( "โค้ดรูปแบบ")
kenny

61

มีประเภท DateTime เท่านั้นใน C # และประกอบด้วยทั้งส่วนวันที่และเวลา หากคุณไม่สนใจส่วนวันที่ของ DateTime ให้ตั้งเป็นค่าเริ่มต้นดังนี้

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

วิธีนี้คุณสามารถสอดคล้องกันได้ในทุก ๆ เวอร์ชันของ. NET แม้ว่า Microsoft ตัดสินใจที่จะเปลี่ยนวันที่พื้นฐานเป็นอย่างอื่น 1/1/0001


19
นี่ควรเป็นคำตอบที่ยอมรับได้ คำถามคือการดึงเวลาจาก DateTime ไม่ใช่การจัดรูปแบบเป็นสตริง
ASalazar

โดยเฉพาะมันคือ "in .NET" ไม่ใช่ "ใน C #"
rory.ap

22

คุณอาจต้องการที่จะมองเข้าไปในDateTime.ToShortTimeString ()วิธีการ

นอกจากนี้ยังมีวิธีการและคุณสมบัติอื่น ๆ อีกมากมายบนวัตถุDateTimeที่สามารถช่วยคุณในการกำหนดวันที่หรือเวลาในแบบที่คุณชอบ เพียงดูเอกสารประกอบ


+1 นี่คือทางออกที่สะอาดที่สุดหากคุณกำลังทำงานในสภาพแวดล้อมระหว่างประเทศที่มีความต้องการการแปลเวลาเป็นภาษาท้องถิ่นเนื่องจากจะส่งคืนเวลาในรูปแบบใดก็ตามที่ระบบปัจจุบันตั้งค่าไว้
aggaton


6

มีหลายวิธีที่จะทำเช่นนั้น คุณสามารถใช้DateTime.Now.ToLongTimeString()ซึ่งจะคืนค่าเวลาในรูปแบบสตริงเท่านั้น


คุณอาจมีความหมายมากกว่าDateTime.ToLongTimeString() DateTime.Now.ToLongTimeString()เมื่อพิจารณาถึงอายุของเธรดนี้ไม่ควรฟื้นคืนชีพขึ้นมาเว้นแต่ว่าการตอบสนองจะช่วยปรับปรุงคำตอบก่อนหน้าให้ดีขึ้นอย่างมีนัยสำคัญ
Leigh

5

คุณสามารถเขียน

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

4
สิ่งนี้ไม่ได้เพิ่มสิ่งใด ๆ ที่ถูกส่งไปเมื่อ 4 ปีที่แล้ว!
paul

5

คุณสามารถใช้สิ่งนี้

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

เป็นเรียลไทม์ที่มีค่ามิลลิวินาทีและตั้งค่าเป็นเวลาเท่านั้น


TimeOfDay เป็นวิธีที่ดี แต่มันจะนำส่วนหนึ่งเป็นมิลลิวินาทีด้วยเช่นกันคุณต้องจัดรูปแบบเวลาของคุณด้วยประเภทมาตรฐาน
ซาดาเดร

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

มันใช้งานได้สำหรับฉัน ฉันค้นพบมันเมื่อฉันต้องทำงานกับ DateTime วันที่เพื่อรับเฉพาะส่วนวันที่

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


2

ถ้าคุณใช้ gridview คุณสามารถแสดงเฉพาะเวลาDataFormatString="{0:t}" ตัวอย่าง:

    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

หากคุณต้องการเปรียบเทียบเวลาและไม่ใช่วันที่คุณอาจมีวันที่เปรียบเทียบแบบมาตรฐานหรือจับคู่กับวันที่คุณใช้เช่นเดียวกับใน ...

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

อาจมีวิธีที่ดีกว่าในการทำสิ่งนี้ แต่ทำให้วันที่ของคุณตรงกัน


1

คุณต้องบัญชีชนิด DateTime ด้วย

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

ไม่มีจุดตอบคำถามนี้ถูกถามเมื่อ 9 ปีที่แล้ว นอกจากนี้ยังมีคำตอบที่ดีสำหรับคำถามนี้อยู่แล้ว
benshabatnoam

คุณไม่ได้คืนเวลา คุณควรตรวจสอบคำตอบของคุณ
Yepeekai

@Yepeekai ไม่มีคลาส Time ใน .NET ดังนั้นอินสแตนซ์ DateTime ที่ไม่มีส่วนของวันที่เป็นหนึ่งในตัวเลือกที่คุณสามารถทำได้ คุณยังสามารถส่งคืนสตริงได้ แต่คุณสามารถใช้ในการดำเนินการ DateTime ฉันเดาว่าคุณสามารถพิจารณา TimeSpan ด้วย
user3720899

imo "DateTime ใหม่ (d.TimeOfDay.Ticks)" เป็นคำตอบที่สะอาดที่สุดจนถึงตอนนี้
Fabianus
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.