我想你得到10-JAN-2014,而不是10月10日2014年。除了没有提供lcid参数的解析(并且使用LANG_USER_DEFAULT
代替 - 请参阅另一个答案),解析代码使用VarDateFromStr
,反过来 - 据推测 - 不会执行复杂的模式匹配,而只是请求区域设置的LOCALE_IDATE
值。
您拥有的1(日 - 月 - 年)的值正在导致此值的顺序。
LCID lcid = MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT); // 0x409 is the locale ID for English US
TCHAR pszIDate[32] = { 0 };
ATLVERIFY(GetLocaleInfo(lcid, LOCALE_IDATE, pszIDate, _countof(pszIDate)) > 0);
_tprintf(_T("LOCALE_IDATE: %s\n"), pszIDate);
COleDateTime dData;
dData.ParseDateTime(_T("10/1/2014 9:43:00 AM"), VAR_DATEVALUEONLY, lcid); // LANG_USER_DEFAULT
_tprintf(_T("%s\n"), dData.Format(0, lcid));
dData.m_dt -= 1.0;
_tprintf(_T("%s\n"), dData.Format(0, lcid));
用(见 “短日期” 设置):
你:
LOCALE_IDATE: 1
10-Jan-14
09-Jan-14
与
你:
LOCALE_IDATE: 0
10/1/2014
9/30/2014
我想你应该宁愿避免使用解析这一传统API,除非你只是格式化参数字符串值从背面在同一系统上的日期/时间字符串。