首页 > 解决方案 > 如何以小时、分钟和秒为单位找到时差 C# windows form app

问题描述

我正在尝试为我的学校创建一个程序,我希望它说明当前期间结束还有多长时间。我已经找到了如何找到当前的时间段,但不确定如何获得基本的小时、分钟和秒。

在我过去的尝试中,我得到了一个像 14.234534 这样的数字,我需要一个数字,这样我就可以将它放入基本的小时、分钟和秒中。

我已经有了这个,它给了我 14.25341

var now = DateTime.Now;
double diffHours = 24 - (now - now.Date).TotalHours + 8;
string final = diffHours.ToString();
label11.Text = final;

谢谢!

标签: c#

解决方案


我无法从您的描述中真正看出“当前时期结束”的时间是什么。如果您可以将其表示为 a DateTime,那么您可以通过从另一个中TimeSpan减去 a来获得 a 。例如,这里是当地时间下午 6:30 之后,所以如果我可以像这样计算到午夜的时间:DateTimeDateTime

var tonightAtMidnight = DateTime.Today + TimeSpan.FromDays(1);
TimeSpan timeLeftUntilMidnight = tonightAtMidnight - DateTime.Now;
Console.WriteLine(timeLeftUntilMidnight.ToString("g"));

我在我的控制台上得到了这个:

5:30:23.1215299

如果你查找TimeSpan.ToString(string),你可以看到如何格式化你想要的。

更新

考虑一些看起来像这样的代码:

private static readonly DateTime[] periodEndings = new DateTime[] {
        DateTime.Today + new TimeSpan (8, 40, 0),
        DateTime.Today + new TimeSpan (9, 20, 0),
        DateTime.Today + new TimeSpan (10, 0, 0),
        DateTime.Today + new TimeSpan (10, 40, 0),
        DateTime.Today + new TimeSpan (11, 20, 0),
        DateTime.Today + new TimeSpan (12, 0, 0),
        DateTime.Today + new TimeSpan (12, 40, 0),
        DateTime.Today + new TimeSpan (13, 20, 0),
        DateTime.Today + new TimeSpan (14, 0, 0),
        DateTime.Today + new TimeSpan (14, 40, 0),
        DateTime.Today + new TimeSpan (15, 20, 0),
        DateTime.Today + new TimeSpan (16, 0, 0),
    };

static string CalculateTimeToNextPeriod(DateTime now) {
    if (now < periodEndings[0]) {
        return "School hasn't started";
    };

    for (var i = 1; i < periodEndings.Length; ++i) {
        if (now > periodEndings[i - 1] && now < periodEndings[i]) {
            var timeLeft = periodEndings[i] - now;
            return timeLeft.ToString(@"hh\:mm\:ss");
        }

    }
    //otherwise
    return "School's over for the day";
}

静态数组设置时间段,小函数返回一个字符串,其中包含从某个时间到该时间之后结束的时间段结束所剩的小时/分钟/秒。我真的不知道您要做什么,但这应该会给您一些想法。


推荐阅读