#windows #date #system
Вопрос:
Я пытаюсь получить системную дату в программе на C на компиляторе MSVC 6.0. Я использую системный вызов:
система(«дата /T») (вывод, например, 13 октября-08, что является датой в моей системе в заданном мной формате)
но при этом дата выводится на консоль ввода-вывода.
Как я могу принять эту дату, возвращенную приведенным выше системным вызовом, и сохранить ее в виде строкового значения в строке, определенной в моем коде? Или
Есть ли какой-либо другой API, который я могу использовать для получения даты в вышеупомянутом формате (13-Окт-08 или 13-10-08) ?
-ОБЪЯВЛЕНИЕ
Ответ №1:
#include <windows.h>
#include <iostream>
int main() {
SYSTEMTIME systmDateTime = {};
::GetLocalTime(amp;systmDateTime);
wchar_t wszDate[64] = {};
int const result = ::GetDateFormatW(
LOCALE_USER_DEFAULT, DATE_SHORTDATE,
amp;systmDateTime, 0, wszDate, _countof(wszDate));
if (result) {
std::wcout << wszDate;
}
}
Ответ №2:
Есть несколько способов сделать это с помощью функций API, два из которых сразу приходят на ум: strftime и GetDateFormat.
Я хотел бы привести примеры, но, боюсь, в данный момент у меня нет под рукой компилятора Win32. Надеюсь, примеров в приведенной выше документации будет достаточно.
Ответ №3:
Ознакомьтесь с функциями времени Win32; GetLocalTime может быть вашим другом. Существуют также стандартные функции времени C, время и strftime.
Для дальнейшего использования в программе на языке Си почти всегда неправильным ответом является вызов внешней утилиты и запись ее вывода.
Ответ №4:
Спасибо за указания.
Я использовал это, и это послужило моей цели:
#include <time.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/timeb.h>
#include <string.h>
int main()
{
char tmpbuf[128];
time_t ltime;
struct tm *today;
_strdate( tmpbuf );
printf("n before formatting date is %s",tmpbuf);
time(amp;ltime);
today = localtime( amp;ltime );
strftime(tmpbuf,128,"%d-%m-%y",today);
printf( "nafter formatting date is %sn", tmpbuf );
}
-ОБЪЯВЛЕНИЕ