c++ - 如何将 wstring 中的 Unix 时间戳转换为 char 数组中的格式化日期

标签 c++ visual-c++-6

对于初学者,请耐心等待我作为 C++ 的新手

最终目标是以 DDMMYY 格式存储日期,例如“120319”,在具有 6 个字节的 char 数组中。

首先,我有一个 wstring 可以检索 Unix 时间戳,例如“155xxxxxxx”。

std::wstring businessday = L"155xxxxxxx"

然后,我将其转换为 wchar_t*

const wchar_t* wcs = businessday.c_str();

然后,在声明一个 10 字节的 char 数组后,我将 wchar_t* 转换为多字节字符串。

          char buffer[10];
          int ret;

          printf ("wchar_t string: %ls \n",wcs);

          ret = wcstombs ( buffer, wcs, sizeof(buffer) );
          if (ret==32) buffer[31]='\0';
          if (ret) printf ("multibyte string: %s \n",buffer);

所以现在名为 bufferchar 数组包含 Unix 时间戳格式的字符串,即“155xxxxxxx”。

如何使用像 DDMMYY 这样的日期格式将其转换为 6 字节的 char 数组,即“120319”?

我使用的是 C++ 的准标准版本 (MS VC++ 6)


回应user4581301's answer :

long myLong = std::stol( buffer );
time_t timet = (time_t)myLong;

std::string tz = "TZ=Asia/Singapore";
putenv(tz.data());
std::put_time(std::localtime(&timet), "%c %Z") ;


struct tm * timeinfo = &timet;

time (&timet);
timeinfo = localtime (&timet);

strftime (buffer,80,"%d%m%Y",timeinfo);

最佳答案

我能想到的最简单的方法是

  1. std::stol 将初始std::wstring 解析为一个足够大小的整数或 std::wcstol
  2. 将整数转换为 time_t
  3. 使用std::localtimetime_t 转换为 tm 结构
  4. 最后使用std::strftimetm 结构格式化为 DDMMYY 字符串。

这将产生一个 7 字节的 char 数组,因为 strftime 将应用空终止符。如果您确实必须有一个 6 字节数组,memcpy 将 7 个字符数组中的前六个字符转换为一个六字符数组。

关于c++ - 如何将 wstring 中的 Unix 时间戳转换为 char 数组中的格式化日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55133645/

相关文章:

c++ - 从文件加载矩阵

c++ - 使用迭代器在字符串中查找子字符串

visual-c++ - 当类向导被破坏时,将计时器 (WM_TIMER) 处理程序添加到 Visual C++ 6.0?

c++ - VC++6.0 : too many actual parameters

c++ - 如何在qsqlquerymodel(QAbstractItemModel)中编写setdata()?

c++ - 将 dynamic_cast 与模板一起使用

c++ - 是什么导致存储的std::list::iterator无效?

visual-c++ - 使 MFC 应用程序国际化

visual-c++ - 使用::SysFreeString() 释放 BSTR。更依赖于平台?

c++ - 在 VC++6 中使用 vector 进行数组排序时出错,而在 VC++2012 中没有错误