【问题标题】:13 character digit string to number13个字符的数字字符串到数字
【发布时间】:2013-11-04 21:17:52
【问题描述】:

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

【问题讨论】:

  • 不要在你的文本中说“我正在使用c++”,而是将标签添加到人们可以看到的问题中,以便人们稍后搜索时这里的标签系统可以使用它。你知道如何使用其他三个标签,对吧?
  • 为什么你会得到这样的字符串中的时间?计算机已经将当前时间(自 1970 年 1 月 1 日起以秒为单位)作为整数!
  • 等待有用的答案有一段时间了。我混合使用了我的答案和海报 2 的答案,然后海报 3 提供了一个很好的答案。你如何标记它?
  • 我不知道他们这次为什么会这样发送。 MS 很有用,但还有其他发送方式。我只需要使用我所拥有的。

标签: c++ string int64


【解决方案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);    

【讨论】:

  • 注意:由于time_t 通常是一个有符号 值,可能最好使用signed long long 等。
【解决方案2】:

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

我不久前创建了a binding for GMP in C#,我很确定它会做你想做的事。

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

【讨论】:

    【解决方案3】:
    time_t c;
    c = strtoul( "1382507187943", NULL, 0 );
    ctime( &c );
    

    解决方案来自here

    【讨论】:

      猜你喜欢
      • 2013-04-15
      • 2018-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-24
      • 2011-12-09
      • 1970-01-01
      • 2015-04-16
      相关资源
      最近更新 更多