13个字符数字字符串到数字

时间:2013-10-25 16:37:39

标签: c++ string int64

我有一个13位数的字符串,这是自1970年1月1日以来的毫秒数。我需要将其转换为日期时间。这样做的第一步是将其变为可用的数字格式。在13个字符处,它超出了ulong和long的极限,最大值为10位。我在看int64转换。将这种野兽变成数字格式的最佳方法是什么?我在Windows平台上使用c ++

实施例 “1382507187943” - >数? - >日期时间?

谢谢!

第2部分

谢谢你们!我正在使用c ++ native。感谢海报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 );

3 个答案:

答案 0 :(得分:1)

使用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 :(得分:0)

如果您使用的语言不支持任意精度算术,则需要添加此类支持。诸如GMP之类的库公开了用于此类数学的API。您的语言可能存在实施或绑定,只要它很受欢迎。

我刚才创建了a binding for GMP in C#,我很确定它会做你想要的。

但是,如果不知道您使用的是哪种语言,很难回答这个问题。

答案 2 :(得分:0)

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

解决方案来自here