gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:37:28 27 4
gpt4 key购买 nike

对于初学者,请耐心等待我作为 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com