ฉันจะรับความแตกต่างของเวลาระหว่างวัตถุ DateTime สองรายการโดยใช้ C # ได้อย่างไร


159

ฉันจะรับความแตกต่างของเวลาระหว่างDateTimeวัตถุสองรายการโดยใช้ C # ได้อย่างไร

คำตอบ:


227

ตัวอย่างต่อไปนี้สาธิตวิธีการทำสิ่งนี้:

DateTime a = new DateTime(2010, 05, 12, 13, 15, 00);
DateTime b = new DateTime(2010, 05, 12, 13, 45, 00);
Console.WriteLine(b.Subtract(a).TotalMinutes);

เมื่อดำเนินการนี้จะพิมพ์ "30" เนื่องจากมีความแตกต่าง 30 นาทีระหว่างวันที่ / เวลา

ผลลัพธ์ของการDateTime.Subtract(DateTime x)เป็นวัตถุ TimeSpanซึ่งให้คุณสมบัติที่มีประโยชน์อื่น ๆ


5
Console.WriteLine((a - b).ToString(@"hh\:mm\:ss"))ในการแสดงความแตกต่างให้ทำอะไรเช่นนี้ ดู: รูปแบบช่วงเวลาที่กำหนดเอง MSDN
ishmael

สิ่งนี้ใช้ได้สำหรับฉัน ฉันแค่อยากจะใช้เวลากี่วินาทีในการที่ลูกค้าจะทำการโทรหา REST และรับการตอบกลับ
Ziggler

1
ให้ความสนใจที่จะใช้TotalMinutes! (ไม่ใช่Minutes)
Shahar Shokrani

64

คุณต้องการTimeSpanstruct:

TimeSpan diff = dateTime1 - dateTime2;

วัตถุ TimeSpan หมายถึงช่วงเวลา (ระยะเวลาหรือเวลาที่ผ่านไป) ซึ่งวัดเป็นจำนวนวันที่ชั่วโมงบวกนาทีเชิงลบหรือเชิงบวกในเชิงบวกหรือเชิงลบ โครงสร้าง TimeSpan ยังสามารถใช้เพื่อแสดงเวลาของวัน แต่ถ้าเวลาไม่เกี่ยวข้องกับวันที่เฉพาะ

มีวิธีการต่าง ๆ ในการรับวันชั่วโมงนาทีวินาทีและมิลลิวินาทีกลับมาจากโครงสร้างนี้

หากคุณสนใจความแตกต่าง:

TimeSpan diff = Math.Abs(dateTime1 - dateTime2);

จะให้ผลต่างเชิงบวกระหว่างเวลาโดยไม่คำนึงถึงลำดับ

หากคุณเพิ่งได้รับองค์ประกอบเวลา แต่เวลาสามารถแยกตามเที่ยงคืนคุณต้องเพิ่ม 24 ชั่วโมงในช่วงเพื่อรับความแตกต่างจริง:

TimeSpan diff = dateTime1 - dateTime2;
if (diff < 0)
{
    diff = diff + TimeSpan.FromDays(1);
}

สวัสดีถ้า datetime2 คือ 09:00 และ dateTime1 คือ 18:00 diff จะเป็น 09Hours 00 นาที ดังนั้นสมการสำหรับ datetime2 คือ 21:00 และ dateTime1 คือ 03:00 ดังนั้นความแตกต่างจะเป็นลบและไม่ถูกต้อง วิธีแก้ปัญหานี้
Pranesh Janarthanan

@Pranesh - หากวัตถุมีวันที่จากนั้นไม่ควรมีปัญหา หากพวกเขาไม่มีเวลาก็ให้ใช้ความแตกต่างที่แน่นอนหรือเพิ่ม 24 ชั่วโมงลงในช่วงเวลาเพื่อให้ความแตกต่างเป็นบวก สิ่งที่ถูกต้องจะขึ้นอยู่กับแอปพลิเคชันของคุณ
ChrisF

ใช่ฉันลบความคิดเห็นเหล่านั้นแล้ว! คุณสามารถแสดงตัวอย่างรหัสสำหรับคำอธิบายของคุณได้ไหม
Pranesh Janarthanan

30

สิ่งที่คุณต้องการคือการใช้DateTimeวิธีลบ classs ซึ่งส่งกลับTimeSpan

var dateOne = DateTime.Now;
var dateTwo = DateTime.Now.AddMinutes(-5);
var diff = dateTwo.Subtract(dateOne);
var res = String.Format("{0}:{1}:{2}", diff.Hours,diff.Minutes,diff.Seconds));

10

วิธีที่ฉันทำตามปกติคือลบ DateTime สองตัวและนี่จะทำให้ฉันมี TimeSpan ที่จะบอกความแตกต่างให้ฉัน

นี่คือตัวอย่าง:

DateTime start = DateTime.Now;
// Do some work
TimeSpan timeDiff = DateTime.Now - start;
timeDiff.TotalMilliseconds;

4

หากทั้งคู่เป็นค่าวันที่และเวลา UTC คุณสามารถทำได้ TimeSpan diff = dateTime1 - dateTime2;

มิฉะนั้นโอกาสของคุณที่จะได้คำตอบที่ถูกต้องในทุก ๆ กรณีที่เป็นไปได้คือศูนย์


3
 var startDate = new DateTime(2007, 3, 24);

 var endDate = new DateTime(2009, 6, 26);

 var dateDiff = endDate.Subtract(startDate);

 var date = string.Format("{0} years {1} months {2} days", (int)dateDiff.TotalDays / 365, 
 (int)(dateDiff.TotalDays % 365) / 30, (int)(dateDiff.TotalDays % 365) / 30);

 Console.WriteLine(date);



2

คุณสามารถใช้ในลักษณะดังต่อไปนี้เพื่อให้เกิดความแตกต่างระหว่างสองวันที่และเวลาวัตถุ สมมติว่ามีวัตถุ DateTime dt1 และ dt2 ตามด้วยรหัส

TimeSpan diff = dt2.Subtract(dt1);
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.