Как преобразовать метку времени Unix в wstring в форматированную дату в массиве char - PullRequest
5 голосов
/ 13 марта 2019

Для начала, пожалуйста, имейте меня как новичка в C ++

Конечная цель - сохранить дату в формате DDMMYY, например, "120319", в массиве char с 6 байтами.

Для начала у меня есть wstring, который получает метку времени Unix, например "155xxxxxxx".

std::wstring businessday = L"155xxxxxxx"

Затем я преобразую ее в wchar_t*.

const wchar_t* wcs = businessday.c_str();

Впоследствии, после объявления массива char из 10 байтов, я преобразую 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".

Как я могу преобразовать ее в char массив из 6 байтов, используя формат даты, такой как DDMMYY, то есть "120319"?

Я используюпредстандартная версия c ++ (MS VC ++ 6)


В ответ на ответ пользователя user4581301 :

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);

Ответы [ 2 ]

3 голосов
/ 13 марта 2019

Самый простой способ, который я могу придумать, - это

  1. разобрать начальные std::wstring в целое число достаточного размера с std::stol или std::wcstol
  2. приведите целое число к time_t
  3. , используйте std::localtime для преобразования time_t в tm структуру
  4. и, наконец, используйте std::strftime для форматирования структуры tm в строку DDMMYY.

Это приведет к массиву из 7 байтов char, поскольку strftime будетприменить нулевой терминатор.Если вам действительно нужен массив из 6 байтов, memcpy первые шесть символов в массиве из 7 символов в массив из шести символов.

0 голосов
/ 18 марта 2019

Протестировано в 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"
...