ฉันจะรับความแตกต่างของเวลาระหว่างDateTime
วัตถุสองรายการโดยใช้ C # ได้อย่างไร
ฉันจะรับความแตกต่างของเวลาระหว่างDateTime
วัตถุสองรายการโดยใช้ C # ได้อย่างไร
คำตอบ:
ตัวอย่างต่อไปนี้สาธิตวิธีการทำสิ่งนี้:
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ซึ่งให้คุณสมบัติที่มีประโยชน์อื่น ๆ
TotalMinutes
! (ไม่ใช่Minutes
)
คุณต้องการTimeSpan
struct:
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);
}
สิ่งที่คุณต้องการคือการใช้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));
วิธีที่ฉันทำตามปกติคือลบ DateTime สองตัวและนี่จะทำให้ฉันมี TimeSpan ที่จะบอกความแตกต่างให้ฉัน
นี่คือตัวอย่าง:
DateTime start = DateTime.Now;
// Do some work
TimeSpan timeDiff = DateTime.Now - start;
timeDiff.TotalMilliseconds;
หากทั้งคู่เป็นค่าวันที่และเวลา UTC คุณสามารถทำได้ TimeSpan diff = dateTime1 - dateTime2;
มิฉะนั้นโอกาสของคุณที่จะได้คำตอบที่ถูกต้องในทุก ๆ กรณีที่เป็นไปได้คือศูนย์
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);
คุณจำเป็นต้องใช้TimeSpan นี่คือตัวอย่างรหัสบางส่วน:
TimeSpan sincelast = TimeSpan.FromTicks(DateTime.Now.Ticks - LastUpdate.Ticks);
TimeSpan sincelast = DateTime.Now - LastUpdate;
private void button1_Click(object sender, EventArgs e)
{
TimeSpan timespan;
timespan = dateTimePicker2.Value - dateTimePicker1.Value;
int timeDifference = timespan.Days;
MessageBox.Show(timeDifference.ToString());
}
คุณสามารถใช้ในลักษณะดังต่อไปนี้เพื่อให้เกิดความแตกต่างระหว่างสองวันที่และเวลาวัตถุ สมมติว่ามีวัตถุ DateTime dt1 และ dt2 ตามด้วยรหัส
TimeSpan diff = dt2.Subtract(dt1);
Console.WriteLine((a - b).ToString(@"hh\:mm\:ss"))
ในการแสดงความแตกต่างให้ทำอะไรเช่นนี้ ดู: รูปแบบช่วงเวลาที่กำหนดเอง MSDN