[英]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);
您可以根据需要使用TimeSpan
的ToString
方法来格式化输出:
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.