Как получить текущую локальную дату формата из системы в C или C ++, которая может быть запущена на всех платформах - PullRequest
0 голосов
/ 24 апреля 2020

Я использую этот метод GetDateFormat из MF C C ++ , чтобы получить текущий формат даты из системы.

#include <windows.h>
#include <stdio.h>
#include <iostream>
using namespace std;

int main()
{
    SYSTEMTIME st, lt;
    TCHAR szTime[256];

    GetSystemTime(&st);
    GetLocalTime(&lt);
    GetDateFormat(LOCALE_USER_DEFAULT, DATE_SHORTDATE, &st, NULL, szTime, 250); // prints current date format from system

    cout << szTime << endl;
    return 0;
}

Сценарий: если я изменю дату вручную в моем system от YYYY-DD-MM до DD-M-YY, тогда при повторном запуске программы следует распечатать обновленный формат даты.

С помощью приведенного выше кода я могу добиться этого, но я думаю, что GetDateFormat только Speci c до windows API. Есть ли какой-либо API для достижения того же в ОС Ma c и Linux?

Обновление:

Подход 2: печатает дату в ожидаемом формате, но не уверен могу ли я использовать это на всех платформах?

/* setlocale example */
#include <stdio.h>      /* printf */
#include <time.h>       /* time_t, struct tm, time, localtime, strftime */
#include <locale.h>     /* struct lconv, setlocale, localeconv */

int main ()
{
  time_t rawtime;
  struct tm * timeinfo;
  char buffer [80];

  struct lconv * lc;

  time ( &rawtime );
  timeinfo = localtime ( &rawtime );
  int twice=0;

    setlocale (LC_ALL,"");
    strftime (buffer,80,"%x",timeinfo);
    printf ("Date is: %s\n",buffer); //prints date in expected format

  return 0;
}

1 Ответ

1 голос
/ 24 апреля 2020
#include <iostream>
#include <iomanip>
#include <ctime>

int main()
{
    std::time_t t = std::time(nullptr);
    std::tm tm = *std::localtime(&t);

    // If you want to set a specific local then use the appropriate local object.
    std::locale lJP("ja_JP");
    std::cout.imbue(lJP);
    std::cout << std::put_time(&tm, "%Ec") << "\n";

    // To pull the system local used by your system then use the empty string.
    std::locale lSY("");
    std::cout.imbue(lSY);
    std::cout << std::put_time(&tm, "%x") << "\n";
}

Выполнение этого:

> ./a.out
金  4/24 09:42:27 2020
Fri Apr 24 09:42:27 2020

Стандартные действительные преобразования можно найти здесь :

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...