如何解析Metro(C ++ / CX)应用程序中的日期?

时间:2012-07-23 15:50:19

标签: datetime microsoft-metro windows-runtime c++-cx

我有一个C ++ / CX应用程序正在处理文件中的一些数据。它有一个字符串,表示用于保存日期的文化,它有一些日期。我需要将它们从字符串转换为Platform :: DateTime。我听说Windows::Globalization::DateTimeFormatting是要使用的类,但我不知道如何使用它。有人有例子吗?

3 个答案:

答案 0 :(得分:14)

WinRT的C ++ / CX投影在很多方面与Managed(C#/ VB)投影不同,其中最重要的是投影基本类型(例如Point,{{ 1}},SizeString)。

托管投影将这些类型投影为.NET类型(具有BCL的所有底层支持),而C ++投影通常最低限度地为interop投影这些类型,期望用户依赖C ++库支持更高级的功能。 / p>

因此,在.NET中,在C ++中,带符号的32位整数变为DateTime(及其相关的System.Int32功能),您将获得常规C ++ .Parse,并且应该使用CRT功能(int)来完成类似的任务。这种差异通常导致不同投影之间存在“特征差距”,其中一个更令人痛苦的是处理_wtoi结构(在BCL中有非常丰富的支持)。

我设法得到的解决方案是从DateTime类开始(通过包含ATLComTime.h找到)并转到COleDateTime - > COleDateTime - > {{ 1}} - > SYSTEMTIME - > FILETIME。这是严肃的体操,但_ULARGE_INTEGER类具有您需要的特定于语言的解析功能。

Windows::Foundation::DateTime

我已经询问了COleDateTime类,文档不正确;它不支持解析,也不支持(仅格式化)。

答案 1 :(得分:4)

std::get_time会不会这样做?页面底部的示例建议您可以使用区域设置将日期字符串解析为tm结构。我想你可以将tm结构转换为正确的WinRT DateTime

答案 2 :(得分:0)

我使用此代码:

auto cal = ref new Windows::Globalization::Calendar(); cal->AddSeconds(additionalSeconds); return cal->GetDateTime();

使用Windows :: Globalization :: Calendar,您可以获得所需的所有时间功能:https://msdn.microsoft.com/library/windows/apps/br206724