Страницы

Поиск по вопросам

пятница, 31 января 2020 г.

Как грамотно вычесть несколько минут из текущего времени в С++?

#cpp #время


Уважаемые коллеги! 
Производственная необходимость просит написать текущее время за минусом 10 минут
и у меня не очень-то получается. Напомню, что получают время примерно так: 

#include "stdafx.h"
#include 
#include 
#include 
#include  // size_t
#include  // strlen, strcpy

using namespace std;


int main()
{
    setlocale(LC_ALL, "Russian");

    SYSTEMTIME st, lt;

    GetSystemTime(&st);
    GetLocalTime(<);
    double dm = st.wMinute - 5; //за минусом 5 минут
    double dm1 = lt.wMinute - 5; //за минусом 5 минут
    //Просто вывод времени
    printf("The system time is: %02d:%02d\n", st.wHour, st.wMinute);
    printf(" The local time is: %02d:%02d\n", lt.wHour, lt.wMinute); 
    //Новое время для моего проекта.
    printf("The system time is: %02d:%02d\n", st.wHour, dm); 
    printf(" The local time is: %02d:%02d\n", lt.wHour, dm1);
    system("PAUSE");
    return 0;
}


Output:

The system time is: 09:24
 The local time is: 12:24
The NEW system time is: 09:00
 The NEW local time is: 12:00


Вполне очевидно что третья и четвёртая строка нас не могут удовлетворить.
Как грамотно исправить это безобразие?
    


Ответы

Ответ 1



Чувствую, что намеки в комментариях не помогают... Начните со строк double dm = st.wMinute - 5; //за минусом 5 минут double dm1 = lt.wMinute - 5; //за минусом 5 минут Замените их строками int dm = st.wMinute - 5; //за минусом 5 минут int dm1 = lt.wMinute - 5; //за минусом 5 минут Дальше будут другие проблемы - когда эта разность окажется отрицательной... но это уже немного другой вопрос.

Ответ 2



Вы не указали ОС, для которой пишете задачу. Судя по вызовам - Windows? В Linux всё очень просто: #include #include int main(int argc, char *argv[]) { time_t t_wrk, t_10; struct tm *ptm; t_wrk = time(NULL); // Текущее время в СЕКУНДАХ t_10 = t_wrk - 600; // 10 минут назад // Печатаем результат ptm = localtime(&t_wrk); printf("Было: %d минут\n", ptm->tm_min); ptm = localtime(&t_10); printf("Стало: %d минут\n", ptm->tm_min); } Подозреваю, что и в виндовозе эти базовые функции работы со временем давным-давно реализованы. Проверил на переход границы часа. Границу суток проверят не стал - слишком уж всё очевидно!

Комментариев нет:

Отправить комментарий