如何将变体 VT_DATE 转换为字符串并包含午夜时间
How can I convert a variant VT_DATE to a string and include the time at midnight
我目前使用 VariantChangeType(或 CComVariant::ChangeType)将日期从变体格式转换为字符串。这很好用,除非变量值的时间部分是午夜。在这种情况下,转换后的字符串中会简单地省略时间。
时间戳 2015/10/07 03:40:00 被转换为字符串,正如您所期望的那样:“10/7/2015 03:40:00 AM”(使用我的区域设置)。
但是 2015/1007 00:00:00 的时间戳被转换为这个字符串:“10/7/2015”(不包括时间部分)。
我正在尝试保留午夜时间,并保持区域设置也在使用中。我看过 _strftime_l() - 它确实在转换后的字符串中包含一个时间,但似乎没有使用区域设置,即使通过 _get_current_locale().
我在 Windows 上使用 C++。
有人做过吗?
好的 - 我找到了解决这个问题的方法。 Windows 有两个 API 调用将使用区域设置格式化日期和时间:GetDateFormat() 和 GetTimeFormat()。它们每个都采用 SYSTEMTIME 结构、输出缓冲区和语言环境说明符。在 return 上,输出缓冲区包含转换为与使用中的语言环境和区域设置匹配的字符串的日期(或时间)。
我还发现,如果您先调用 setlocal(LC_ALL, ""),_strftime_l() 实际上会使用区域设置。我对使用该方法有点怀疑,因为它可能有我不知道的副作用。
我目前使用 VariantChangeType(或 CComVariant::ChangeType)将日期从变体格式转换为字符串。这很好用,除非变量值的时间部分是午夜。在这种情况下,转换后的字符串中会简单地省略时间。
时间戳 2015/10/07 03:40:00 被转换为字符串,正如您所期望的那样:“10/7/2015 03:40:00 AM”(使用我的区域设置)。
但是 2015/1007 00:00:00 的时间戳被转换为这个字符串:“10/7/2015”(不包括时间部分)。
我正在尝试保留午夜时间,并保持区域设置也在使用中。我看过 _strftime_l() - 它确实在转换后的字符串中包含一个时间,但似乎没有使用区域设置,即使通过 _get_current_locale().
我在 Windows 上使用 C++。
有人做过吗?
好的 - 我找到了解决这个问题的方法。 Windows 有两个 API 调用将使用区域设置格式化日期和时间:GetDateFormat() 和 GetTimeFormat()。它们每个都采用 SYSTEMTIME 结构、输出缓冲区和语言环境说明符。在 return 上,输出缓冲区包含转换为与使用中的语言环境和区域设置匹配的字符串的日期(或时间)。
我还发现,如果您先调用 setlocal(LC_ALL, ""),_strftime_l() 实际上会使用区域设置。我对使用该方法有点怀疑,因为它可能有我不知道的副作用。