在计时器倒计时中包括小时

Include hour in timer countdown

我正在尝试创建一个包括小时数的倒计时。

private int time = 3660;        

public MainWindow()
{
    var vm = new TimerViewModel();

    InitializeComponent();

    // get display setting - 2 means extended
    int displayType = Screen.AllScreens.Length;

    // set the windows datacontext
    DataContext = vm;

    // set up the timedispatcher
    dt.Interval = new TimeSpan(0, 0, 1);
    dt.Tick += Timer_Tick;
}   

private void Timer_Tick(object sender, EventArgs e)
{
    switch(time)
    {
        case int x when x > 10 && x <= 20:                 
            TimerPreview.Foreground = Brushes.Orange;

            time--;
            break;

        .....................

        default:
            TimerPreview.Foreground = Brushes.LimeGreen;
            time--;
            break;
    }

    TimerPreview.Content = string.Format("00:{0:00}:{1:00}",  time / 60, time % 60);
}

我不知道如何让倒计时与小时数一起正常工作。它适用于分钟和秒。

TimerPreview.Content = string.Format("{0:00}:{1:00}:{2:00}", time ???, time ??? 60, time % 60);

我尝试了多种组合,但未能找到解决方案。我错过了什么?非常感谢。

使用 3600(一小时中的秒数),并在分钟上使用模数运算符,就像您在秒上所做的那样(因为您希望 60 分钟看起来滚动到新的一小时):

TimerPreview.Content =
    string.Format("{0:00}:{1:00}:{2:00}", time / 3600, (time / 60) % 60, time % 60);

//  320 -> 00:05:20
// 7199 -> 01:59:59
// 7201 -> 02:00:01

另一个(可以说更具可读性)选项是使用 TimeSpan 来处理格式:

TimerPreview.Content = TimeSpan.FromSeconds(time).ToString(@"hh\:mm\:ss");

time3660时的结果:

01:01:00


编辑: 感谢@GrantWinney 指出 TimeSpan 的默认字符串格式与上面相同,除非时间跨度大于一天,在这种情况下,它也包括天数。所以你可以这样做:

TimerPreview.Content = TimeSpan.FromSeconds(time).ToString();