c# - 如何在 C# 中显示两个日期之间的计算值,仅小时和分钟超过 24 小时的差异
问题描述
我有一个名为 Duration 的属性,该属性是对另外两个名为 StartDate 和 EndDate 的属性的计算。
问题是,我需要格式为“hh:mm”的这两个日期之间的差异,我可以用我在互联网上找到的很多代码和解决方案来做到这一点,但最后我总是遇到同样的问题,天数……
今天我有以下代码:
[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 实际上返回了一个带有你不想要的分数分量的双精度数。我没有使用TotalMinutes
,因为我认为第二个组件不相关。
推荐阅读
- kubernetes - 在不同节点上运行的 K8s pod 无法相互通信
- node.js - 在重置密码反应前端时出错,但在 api 请求中工作正常
- asp.net-web-api - FromQueryAttribute 和 ModelBinderAttribute 的顺序很重要吗?
- smtp - 如何在谷歌工作区(Gmail)中验证电子邮件消息 ID
- python - Python:用标签中的空格字符重命名驱动器卷
- aem - 如何在 AEM 中通过 groovy 脚本创建用户组并设置 ACL 权限
- node.js - Node.js API 真实证书被视为自签名
- excel - 在excel中提取两个字符串之间的名称
- laravel-8 - 使用 livewire-ui/modal 创建的模态不会关闭
- javascript - 智能合约测试 - “未捕获的类型错误:无法读取未定义的属性‘调用’”