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

234
04 марта 2017, 05:16

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

#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <windows.h>
#include <cstddef> // size_t
#include <cstring> // strlen, strcpy
using namespace std;

int main()
{
    setlocale(LC_ALL, "Russian");
    SYSTEMTIME st, lt;
    GetSystemTime(&st);
    GetLocalTime(&lt);
    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

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

Answer 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 минут

Дальше будут другие проблемы - когда эта разность окажется отрицательной... но это уже немного другой вопрос.

Answer 2

Вы не указали ОС, для которой пишете задачу. Судя по вызовам - Windows? В Linux всё очень просто:

#include <time.h>
#include <stdio.h>
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);
}

Подозреваю, что и в виндовозе эти базовые функции работы со временем давным-давно реализованы. Проверил на переход границы часа. Границу суток проверят не стал - слишком уж всё очевидно!

READ ALSO
Можно ли получить данные из постоянно обновляемого файла?

Можно ли получить данные из постоянно обновляемого файла?

Здравствуйте! Смотрите, есть файл, например, вот этот - "nashe1hostingradio

266
Сборка js-файла из es6 модулей с помощью gulp

Сборка js-файла из es6 модулей с помощью gulp

Не нашел статьи, где достаточно просто объяснён процесс сборки javaScript-файла из ES6-модулей с помощью gulpЗадача данного вопроса - совместными...

376
Как присвоить метод конструктору?

Как присвоить метод конструктору?

Я изучаю JS, и заметил что после создания объекта можно сделать внешнюю функцию его методом, при этом новый элемент внутри объекта (для хранения...

211