获取系统日期格式字符串Win32

时间:2015-10-04 08:34:31

标签: c++ winapi

我需要获取系统当前日期格式字符串(“dd-mm-yyyy”,“mm / dd / yyyy”等等。

GetDateFormat()API返回格式化的字符串,如“12-09-2015”,但需要字符串“dd-mm-yyyy”

C#解决方案

string sysFormat = CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern;

但我需要在Win32中。

2 个答案:

答案 0 :(得分:1)

您可以通过枚举来获取当前适用的格式字符串列表。这是通过EnumDateFormats完成的。请注意,可能(并且通常是)多个,因此您必须决定选择哪一个 1)

以下代码返回系统的默认短日期格式模式:

static std::list<std::wstring> g_DateFormats;
BOOL CALLBACK EnumDateFormatsProc( _In_ LPWSTR lpDateFormatString ) {
    // Store each format in the global list of dateformats.
    g_DateFormats.push_back( lpDateFormatString );
    return TRUE;
}

std::wstring GetShortDatePattern() {
    if ( g_DateFormats.size() == 0 &&
         // Enumerate all system default short dateformats; EnumDateFormatsProc is
         // called for each dateformat.
         !::EnumDateFormatsW( EnumDateFormatsProc,
                              LOCALE_SYSTEM_DEFAULT,
                              DATE_SHORTDATE ) ) {
        throw std::runtime_error( "EnumDateFormatsW" );
    }
    // There can be more than one short date format. Arbitrarily pick the first one:
    return g_DateFormats.front();
}

int main() {
    const std::wstring strShortFormat = GetShortDatePattern();
    return 0;
}

<小时/> 1) .NET实现做同样的事情。从候选人名单中,它随意挑选第一个候选人。

答案 1 :(得分:-1)

您可以将time功能与localtime功能结合使用。

示例代码:

//#include <time.h>
time_t rawtime;
struct tm * timeinfo;
time(&rawtime);
timeinfo = localtime(&rawtime);
//The years are since 1900 according the documentation, so add 1900 to the actual year result.
char cDate[255] = {};
sprintf(cDate, "Today is: %d-%d-%d", timeinfo->tm_mday, timeinfo->tm_mon, timeinfo->tm_year + 1900);