У меня есть строка из 13 цифр, которая с 1 января 1970 года составляет миллисекунды. Мне нужно преобразовать его в дату и время. Первый шаг для этого — перевести его в удобный числовой формат. При 13 символах он выходит за пределы ulong и long, которые имеют максимум 10 цифр. Я смотрю на преобразования int64. Как лучше всего перевести этого зверя в числовой формат? Я использую C ++ на платформе Windows
пример
«1382507187943» -> номер? -> дата / время?
Спасибо!
ЧАСТЬ 2
Спасибо вам, ребята! Я использую с ++ нативный. Спасибо постеру 2 за код.
Я попробовал это, и это сработало так же, где str содержит число и является std :: string:
__int64 u = _atoi64( str.c_str() );
ЧАСТЬ 3
На самом деле, 13-значный номер не вписывается в strtoul. Я сделал это и вернул верную строку.
__int64 u = _atoi64( str.c_str() );
time_t c;
//c = strtoul( "1382507187943", NULL, 0 );
c = u;
time(&c);
std::string s = ctime( &c );
Либо использовать strtull()
или отбросьте миллисекунды самостоятельно.
unsigned long long tms = strtoull("1382507187943", 10, 0);
time_t rawtime = tms/1000;
unsigned ms = tms%1000;
или же
char buf[] = "1382507187943";
unsigned ms = strtoul(&buf[10], 10, 0);
buf[10] = '\0';
time_t rawtime = strtoul(buf, 10, 0);
затем
struct tm * timeinfo;
time (&rawtime);
timeinfo = localtime (&rawtime);
Если вы используете язык, который не имеет встроенной поддержки арифметики произвольной точности, вам нужно будет добавить такую поддержку. Библиотека, такая как GMP выставляет API для такой математики. Вполне вероятно, что реализация или привязка существует для вашего языка, если он популярен.
я создал привязка для GMP в C # Некоторое время назад, и я уверен, что он будет делать то, что вы хотите.
Однако трудно ответить на этот вопрос, не зная, какой язык вы используете.
time_t c;
c = strtoul( "1382507187943", NULL, 0 );
ctime( &c );
Решение было от Вот