2

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

示例“1382507187943”-> 数字?--> 日期时间?

谢谢!

第2部分

感谢你们!我正在使用 c++ 本机。感谢海报 2 的代码。

我试过了,它在 str 包含数字并且是 std::string 的地方也能正常工作:

__int64 u = _atoi64( str.c_str() );

第三部分

实际上,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 );
4

3 回答 3

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);    
于 2013-10-25T17:03:26.573 回答
0

如果您使用的语言不支持任意精度算术,则需要添加此类支持。诸如GMP之类的库为此类数学公开了一个 API。只要您的语言流行,它就可能存在实现或绑定。

不久前,我在 C# 中为 GMP创建了一个绑定,我很确定它会做你想做的事。

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

于 2013-10-25T16:40:06.257 回答
0
time_t c;
c = strtoul( "1382507187943", NULL, 0 );
ctime( &c );

解决方案来自这里

于 2013-10-25T16:45:57.260 回答