簡體   English   中英

如何顯示兩個日期之間的計算值,而C#中僅小時和分鍾之間的差異超過24小時

[英]How to show a calculated value between two dates with just the hour and the minute above 24 hours of difference in C#

我有一個名為Duration的屬性,此屬性是對另外兩個名為StartDate和EndDate的屬性的計算。

問題是,我需要以“ hh:mm”格式區分兩個日期之間的區別,並且可以使用我在Internet上找到的許多代碼和解決方案來做到這一點,但是最后我總是遇到相同的問題,天數...

今天,我有以下代碼:

[NotMapped]
public string Duration
{
 get
 {
  if (StartDate != null && EndDate != null)
  {
   return (EndDate - StartDate).Value.ToString().Substring(0, 5);
  }
  return null;
 }
 set
 {
  if (value == null) throw new ArgumentNullException(nameof(value));
 }
}

考慮到我們具有以下開始和結束日期值:StartDate = 2019/03/14-10:43 AM EndDate = 2019/03/14-11:00 AM

它顯示如下輸出:

持續時間= 00:16

但是,當我的時差超過24小時時,它就算一天,並且我得到的值無效。

例如:StartDate = 2019/03/05-03:00 AM EndDate = 2019/03/15-04:00 AM

它打印:

持續時間= 1.01:

今天很忙,我需要采用小時:分鍾格式。

有人可以幫我嗎?

最好不要使用SubString。

如果您從另一個日期減去一個日期,則會得到一個TimeSpan

您可以對此執行ToString()或使用其屬性來顯示所需的內容,但是由於要顯示總小時數而不是僅顯示小時數,因此必須使用各個屬性:

 var startDate = DateTime.Now;
 var endDate = startDate.AddHours(30).AddMinutes(20);

 var difference = endDate - startDate;

 var hoursComponent = ((int)difference.TotalHours).ToString("D2");
 var minutesComponent = difference.Minutes.ToString("D2");

 Console.WriteLine($"{hoursComponent}:{minutesComponent}");

這樣的事情應該做。 如果只有一個數字,我將D2放入其中以使其顯示前導零。 我將TotalHours轉換為int因為TotalHours實際上返回一個帶有您不想要的小數部分的double。 我沒有使用TotalMinutes因為我認為第二個組件不相關。

這是怎么做的:

DateTime startDate = DateTime.Now;

DateTime endDate = startDate.AddDays(1).AddHours(2).AddMinutes(3);

TimeSpan difference = endDate - startDate;

int totalHours = (int)difference.TotalMinutes / 60;
int totalMinutes = (int)difference.TotalMinutes % 60;

Console.WriteLine(string.Format("{0}:{1}", totalHours.ToString("D2"), totalMinutes.ToString("D2")));

輸出:

26:03

根據您的要求,經過26小時3分鍾。

嘗試這個,

hours = (datevalue1 - datevalue2).TotalHours().ToString();

與時間跨度:

TimeSpan span = (EndDate - StartDate);

String.Format("{0}:{1}",span.Hours, span.Minutes);

您可以根據需要使用TimeSpanToString方法來格式化輸出:

void Main()
{
    DateTime? startDate = new DateTime(2019, 3, 5, 3, 0, 0);
    DateTime? endDate = new DateTime(2019, 3, 15, 4, 0, 0);

    TimeSpan result = (endDate - startDate).Value;
    Console.WriteLine(result.ToString(@"dd\:hh\:mm\:ss"));
}

輸出:

10:01:00:00

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM