13-значный символьная строка для номера

У меня есть строка из 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 );

2

Решение

Либо использовать 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);
1

Другие решения

Если вы используете язык, который не имеет встроенной поддержки арифметики произвольной точности, вам нужно будет добавить такую ​​поддержку. Библиотека, такая как GMP выставляет API для такой математики. Вполне вероятно, что реализация или привязка существует для вашего языка, если он популярен.

я создал привязка для GMP в C # Некоторое время назад, и я уверен, что он будет делать то, что вы хотите.

Однако трудно ответить на этот вопрос, не зная, какой язык вы используете.

0

time_t c;
c = strtoul( "1382507187943", NULL, 0 );
ctime( &c );

Решение было от Вот

0
По вопросам рекламы [email protected]