对于初学者,请耐心等待我作为 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);
所以现在名为 buffer
的 char
数组包含 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::stol
将初始std::wstring
解析为一个足够大小的整数或std::wcstol
- 将整数转换为
time_t
- 使用
std::localtime
将time_t
转换为tm
结构 - 最后使用
std::strftime
将tm
结构格式化为 DDMMYY 字符串。
这将产生一个 7 字节的 char
数组,因为 strftime
将应用空终止符。如果您确实必须有一个 6 字节数组,memcpy
将 7 个字符数组中的前六个字符转换为一个六字符数组。
关于c++ - 如何将 wstring 中的 Unix 时间戳转换为 char 数组中的格式化日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55133645/