локальное время с ++ не работает, как я хотел бы - PullRequest
0 голосов
/ 19 апреля 2020

У меня проблема с местным временем в с ++. Я использую против кода и localtime_s не работает. Когда я использую местное время, оно дает очень большие числа для сегодняшнего часа, минуты и секунды (например, «6417576: 16480216: 6422248»). Как я могу изменить это на что-то вроде «16:30:30», например? Я не могу найти какую-либо информацию, которая поможет мне, так что, возможно, вы, ребята, найдете. Вот мой код:

void write(string team_name)
    {
        //current time
        time_t current;
        current=time(0);
        struct tm now;
        localtime(&current);
        stringstream time;
        time<<now.tm_hour<<":"<<now.tm_min<<":"<<now.tm_sec;
        //writing filenames and times
        stringstream filename;
        filename<<"Filename"<<"_"<<team_name<<time.str()<<".txt";
        ofstream file;
        file.open(filename.str());
        file<<show();
        void print_time();
        file.close();
    }
};

Ответы [ 2 ]

1 голос
/ 19 апреля 2020

Ничто не связывает эти два утверждения каким-либо образом:

struct tm now;
localtime(&current);

Второе утверждение обрабатывает все, но затем отбрасывает результат, поэтому все эти поля в now являются все еще установлен на любое произвольное значение, которое они имели при создании переменной.

Функция localtime возвращает указатель на структуру, поэтому вы должны использовать это:

struct tm *now = localtime(&current);
// use now->something
0 голосов
/ 19 апреля 2020

Как указано в комментарии, вашему tm struct ничего не было назначено, способ сделать это - присвоить возврат localtime, который является указателем на tm struct, здесь это пример работы код, основанный на вашем:

#include <iostream>
#include <sstream>
#include <ctime>

void write()
{
    time_t current;
    current = time(0);

    struct tm *now = nullptr;
    now = localtime(&current); //bind time to tm struct

    if(now) //you need to check the validity of the struct before accessing it's members
        std::cout << now->tm_hour << ":" << now->tm_min << ":" 
                  << now->tm_sec << std::endl; //test print

    std::cout << ctime(&current); //you can use ctime to print all directly without tm struct

    std::stringstream time;
    if(now)
        time << now->tm_hour << ":" << now->tm_min << ":" << now->tm_sec;

    //time << ctime(&current); // as you can to insert it in the stream

    //...
}

int main()
{
    write();
}
...