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

问题描述 投票:5回答:2

首先,请作为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);

所以现在名为charbuffer数组包含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);
c++ vc6
2个回答
3
投票

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

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

这将导致7字节的char数组,因为strftime将应用空终止符。如果你真的必须有一个6字节的数组,memcpy将7字符数组中的前六个字符变成一个六字符数组。


0
投票

在VS 6.0中测试:

char output[7];
std::wstring input = L"1552869062"; // 2019-03-17 20:31:02 MST
time_t tmp_time = wcstol(input.c_str(), NULL, 10); // _wtoi() works too
strftime(output, sizeof(output), "%d%m%y", localtime(&tmp_time));

output will contain: "170319"
© www.soinside.com 2019 - 2024. All rights reserved.