У меня есть метка времени unix как std::string, и я хочу преобразовать ее в красивую строку даты. Уже заданные вопросы показывают только преобразования с получением текущего времени (и используют «авто» во всех местах, поэтому я не уверен, какой класс подходит), но это — это уже существующий std::string.
std::string beauty_date; //"%d-%m-%Y"
std::string stamp = "1567555200";
time_t stamp_as_time = (time_t) std::stoi(stamp);
Я предполагаю, что это нужно сначала преобразовать в unsigned long int (он же time_t). Мой вопрос в том, как поместить «stamp_as_time» в beauty_date.
Заранее спасибо!
Обновлено: из комментариев вот что я пробовал с put_time
std::string beauty_date; //"%d-%m-%Y"
std::string stamp = "1567555200";
time_t stamp_as_time = (time_t) std::stoi(stamp);
beauty_date = std::put_time(std::localtime(&stamp_as_time), "%d-%m-%Y");
Это тоже не работает.
Я последовал этому и попытался std::tm tm = *std::localtime(stamp_as_time); и beauty_date = std::put_time(&tm, "%d"); который, к сожалению, не работает
time_t
в настоящее время обычно является 64-битным типом, поэтому вместо него следует использовать stoll
Следующее должно работать для вас:
#include<iostream>
#include<iomanip>
#include<string>
#include<ctime>
int main() {
std::string ts_str{ "1567555200" };
std::int64_t result = std::stoi(ts_str);
std::time_t tmp = result;
std::tm* t = std::gmtime(&tmp);
std::cout << std::put_time(t, "%d-%m-%Y") << std::endl;
return 0 ;
}
Или, если вы хотите поместить это в beauty_date
:
std::stringstream ss;
ss << std::put_time(t, "%d-%m-%Y");
beauty_date = ss.str();
Удивительный! Я надеюсь, что когда-нибудь такая функция появится в std::. Спасибо.
Почему вы получаете C-строку от ts_str
? Вызов std::stoi
создает из него другой std::string
. std::stoi(ts_str)
достаточно.
@AsteroidsWithWings о, хорошо, приятно знать... спасибо
@QtFan разве это уже не std::
? Кстати, если вам нравится ответ, пожалуйста, проголосуйте :)
@NutCracker Я все еще пробовал 10 репутаций ... Я новичок в stackoverflow. Но когда я получу 15, я вернусь, чтобы проголосовать! Редактировать: каким-то образом это сработало!
@QtFan Теперь вам достаточно :)