C ++ ctime () для даты форматированной строки? - PullRequest
1 голос
/ 29 сентября 2019

Я пытаюсь изменить формат моей метки времени Unix.Но я не вижу никакой возможности настроить формат.

Это мой код:

tempstring = "Your last login was: ";
time_t lastLogin = player->getLastLoginSaved(); // &lastLogin = Unix timestamp

tempstring += ctime(&lastLogin);
tempstring.erase(tempstring.length() -1);
tempstring += ".";
AddTextMessage(msg, MSG_STATUS_DEFAULT, tempstring.c_str());

Это даст мне вывод:

Your last login was: Sun Sep 29 02:41:40 2019.

Как я могу изменить этот формат вместо этого?

Your last login was: 29. Sep 2019 02:41:40 CET.

Я считаю, что формат будет: %d. %b %Y %H:%M:%S CET

Но как я могу это сделать с помощью ctime ()?Пожалуйста, дайте мне знать, если есть какой-либо способ изменить формат.Я новичок в C ++, поэтому, если мне нужна другая библиотека, пожалуйста, дайте мне знать.

1 Ответ

0 голосов
/ 29 сентября 2019

Вы можете использовать time.h.Разбейте ваш time_t на struct tm.

struct tm *localtime(const time_t *clock);

struct tm {
    int tm_sec;         /* seconds */
    int tm_min;         /* minutes */
    int tm_hour;        /* hours */
    int tm_mday;        /* day of the month */
    int tm_mon;         /* month 0 to 11*/
    int tm_year;        /* years since 1900*/
    int tm_wday;        /* day of the week 0 to 6*/
    int tm_yday;        /* day in the year 0 to 365*/
    int tm_isdst;       /* daylight saving time */
};

Затем отформатируйте с помощью sprintf, не забывая добавить смещения.Например, snprintf(cTimeStr, sizeof(cTimeStr), "%04d-%02d-%02d %02d:%02d:%02d", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec);

Используйте массивы константных символов или строковый массив, чтобы получить месяц в виде строки.

См. Также: http://zetcode.com/articles/cdatetime/

...