我需要获取系统当前日期格式字符串(“dd-mm-yyyy”,“mm / dd / yyyy”等等。
GetDateFormat()API返回格式化的字符串,如“12-09-2015”,但需要字符串“dd-mm-yyyy”
C#解决方案
string sysFormat = CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern;
但我需要在Win32中。
答案 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)
示例代码:
//#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);