我有一个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 );
答案 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