首先,请作为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);
所以现在名为char
的buffer
数组包含Unix时间戳格式的字符串,即“155xxxxxxx”。
如何使用DDMMYY等日期格式将其转换为6字节的char
数组,即“120319”?
我正在使用预标准版的c ++(MS VC ++ 6)
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);
我能想到的最简单的方法就是
std::wstring
或std::stol
将初始std::wcstol
解析为足够大小的整数time_t
std::localtime
将time_t
转换为tm
结构std::strftime
将tm
结构格式化为DDMMYY字符串。这将导致7字节的char
数组,因为strftime
将应用空终止符。如果你真的必须有一个6字节的数组,memcpy
将7字符数组中的前六个字符变成一个六字符数组。
在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"