.net 在c#中以字符串形式表示小时和分钟之间的差值

xqnpmsa8  于 2023-03-13  发布在  .NET
关注(0)|答案(2)|浏览(121)

我有两个HH:MM的时间作为字符串。我想用下面的格式得到这两个时间的差:

00 Hours : 00 Minutes

我的代码:

string t1 = "23:10";
string t2 = "02:09";

DateTime now = DateTime.Now;
DateTime dt1 = new DateTime(now.Year, now.Month, now.Day, 
int.Parse(t1.Split(':')[0]), int.Parse(t1.Split(':')[1]), 0);

DateTime dt2 = new DateTime(now.Year, now.Month, now.Day, 
int.Parse(t2.Split(':')[0]), int.Parse(t2.Split(':')[1]), 0);

 var result = dt1 - dt2;
 Console.WriteLine(result);

结果是:21:01:00,但我希望写入21 Hours : 01 Minutes
有人能帮帮我吗?

yhqotfr8

yhqotfr81#

1)您可以使用TimeSpan.Parse()来代替DateTime
2)要显示预期的格式,可以使用TimeSpan format strings并指定格式:

string t1 = "23:10";
string t2 = "02:09";
var result=TimeSpan.Parse(t1)-TimeSpan.Parse(t2);
Console.WriteLine(result.ToString("hh' Hours : 'mm' Minutes '"));

结果:
21小时01分钟

注:

toString()中的hhmm:一位数的小时/分钟有一个前导零。

piwo6bdm

piwo6bdm2#

您只需要更改结果字符串的格式

string output = $"{(int)diff.TotalHours:D2} Hours : {diff.Minutes % 60:D2} Minutes";
Console.WriteLine(output);

以下是有关Decimal格式说明符(D)的详细信息:
“D”(或decimal)格式说明符将数字转换为十进制数字(0-9)的字符串,如果数字为负数,则以减号作为前缀。只有整型才支持此格式。
精度说明符指示结果字符串中所需的最小位数。如果需要,将在数字左侧填充零,以生成精度说明符指定的位数。如果未指定精度说明符,则默认值为表示不带前导零的整数所需的最小值。
结果字符串受当前NumberFormatInfo对象的格式设置信息的影响。如下表所示,单个属性会影响结果字符串的格式设置。

相关问题