Kat*_*ory 15 datetime microsoft-metro windows-runtime c++-cx
我有一个C++/CX应用程序正在处理文件中的一些数据.它有一个字符串,表示用于保存日期的文化,它有一些日期.我需要将它们从字符串转换为Platform :: DateTime.我听说 Windows :: Globalization :: DateTimeFormatting是要使用的类,但我没有看到如何使用它.有人有例子吗?
And*_*ich 14
的WinRT的C++/CX突起从管(C#/ VB)投影的不同之处多种方式,而最重要的一种是在基本类型的突出部(例如Point,Size,String,和DateTime).
托管投影将这些类型作为.NET类型(具有BCL的所有底层支持)进行投影,而C++投影通常最低限度地将这些类型投影到interop,期望用户依赖C++库支持更高级的功能.
因此,在.NET中,带符号的32位整数在C++中变为System.Int32(具有相关.Parse功能),您将获得常规C++ int,并且期望使用CRT功能(_wtoi)来完成类似的任务.这种差异经常导致不同投影之间的"特征差距",其中一个更痛苦的是处理DateTime结构(在BCL中具有非常丰富的支持).
我设法得到的解决方案是从COleDateTime类开始(通过包含ATLComTime.h找到)并转到COleDateTime- > SYSTEMTIME- > FILETIME- > _ULARGE_INTEGER- > Windows::Foundation::DateTime.这是严肃的体操,但该COleDateTime课程具有您需要的特定于语言的解析功能.
LCID lcid = LocaleNameToLCID(L"es-es", LOCALE_ALLOW_NEUTRAL_NAMES); //parse language tag to get locale ID
COleDateTime dt;
dt.ParseDateTime(L"12 enero, 2012 10:00:01", 0, lcid); //parse date string based on language
//get system time struct
SYSTEMTIME st;
dt.GetAsSystemTime(st);
//COleDateTime is in local timezone, DateTime is in UTC, so we need to convert
SYSTEMTIME st_utc;
TzSpecificLocalTimeToSystemTime(nullptr, &st, &st_utc);
//get filetime struct to get a time format compatible with DateTime
FILETIME ft;
SystemTimeToFileTime(&st_utc, &ft);
//use _ULARGE_INTEGER to get a uint64 to set the DateTime struct to
_ULARGE_INTEGER ulint = {ft.dwLowDateTime, ft.dwHighDateTime};
Windows::Foundation::DateTime wfdt;
wfdt.UniversalTime = ulint.QuadPart;
Run Code Online (Sandbox Code Playgroud)
我已经询问过这个DateTimeFormatter课程,而且文档不正确; 它不支持解析,也不支持(仅格式化).