我有一个C ++ / CX应用程序正在处理文件中的一些数据。它有一个字符串,表示用于保存日期的文化,它有一些日期。我需要将它们从字符串转换为Platform :: DateTime。我听说Windows::Globalization::DateTimeFormatting是要使用的类,但我不知道如何使用它。有人有例子吗?
答案 0 :(得分:14)
WinRT的C ++ / CX投影在很多方面与Managed(C#/ VB)投影不同,其中最重要的是投影基本类型(例如Point
,{{ 1}},Size
和String
)。
托管投影将这些类型投影为.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