Включить час в таймер обратного отсчета - PullRequest
0 голосов
/ 26 октября 2018

Я пытаюсь создать обратный отсчет, который включает часы.

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);

Я пробовал несколько комбинаций, но не смог найти решение. Что мне не хватает? Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Другим (возможно, более читабельным) вариантом будет использование TimeSpan для обработки форматирования:

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

Результат, когда time равен 3660:

01:01:00


РЕДАКТИРОВАТЬ: Спасибо @GrantWinney за указание, что формат строки по умолчанию для TimeSpan такой же, как указано выше, за исключением временибольше дня, и в этом случае оно также включает дни.Так что вы можете просто сделать:

TimerPreview.Content = TimeSpan.FromSeconds(time).ToString();
0 голосов
/ 26 октября 2018

Используйте 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
...