首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PocketPC -将VT_DATE转换为不变量VT_BSTR

PocketPC -将VT_DATE转换为不变量VT_BSTR
EN

Stack Overflow用户
提问于 2008-09-22 16:28:03
回答 3查看 1.7K关注 0票数 0

我正在尝试将一个变体从VT_DATE转换为不变的 VT_BSTR。以下代码适用于Windows:

代码语言:javascript
复制
VARIANT va;
::VariantInit(&va);

// set the variant to VT_DATE
SYSTEMTIME st;
memset(&st, 0, sizeof(SYSTEMTIME));
st.wYear = 2008;
st.wMonth = 9;
st.wDay = 22;
st.wHour = 12;
st.wMinute = 30;

DATE date;
SystemTimeToVariantTime(&st, &date);

va.vt = VT_DATE;
va.date = date;

// change to a string
err = ::VariantChangeTypeEx(&va, 
                &va, 
                LOCALE_INVARIANT, 
                0, 
                VT_BSTR);

但是在PPC 2003和Windows 5上,上面的代码返回E_FAIL。有人能纠正上述代码或提供替代方案吗?

编辑:将日期转换为字符串后,我将使用该字符串执行一个SQL。我希望无论设备的区域设置如何,更新都能工作,所以我尝试将其转换为“不变”格式。

我现在使用以下方法将日期转换为一种似乎有效的格式:

代码语言:javascript
复制
err = ::VariantTimeToSystemTime(va.date, &time);
if (FAILED(err))
    goto cleanup;

err = strDate.PrintF(_T("%04d-%02d-%02d %02d:%02d:%02d.%03d"),
    time.wYear,
    time.wMonth,
    time.wDay,
    time.wHour,
    time.wMinute,
    time.wSecond,
    time.wMilliseconds);
EN

回答 3

Stack Overflow用户

发布于 2008-09-23 03:33:16

这并不是真正的答案,但是将日期更改为字符串并不是一个区域不变的任务,它很大程度上取决于区域设置。在本例中,我将变量时间转换为系统时间,然后使用sprintf样式函数将其转换为字符串。

票数 1
EN

Stack Overflow用户

发布于 2008-09-23 15:32:35

(很抱歉,我花了一段时间才做出回应(“工作”,你知道.)

从COM的角度来看,我不认为代码有什么问题。

也许问题在于LOCALE_INVARIANT。它是在Windows中引入的;也许在Windows系列中不支持它?

尝试将区域设置更改为LOCALE_USER_DEFAULT,并检查是否仍有错误。大多数情况下,这将是最合适的区域设置;特别是当您试图向用户显示该值时。

如果您确实需要一种特定的格式,因为您需要将该值传递到解析它的其他地方,那么尝试使用与您的需求相匹配的特定区域设置;也许是en_US。

请告诉我们事情进展如何。

票数 1
EN

Stack Overflow用户

发布于 2008-09-23 13:31:00

在你的上下文中不确定,但似乎你走错了路。为什么不使用VarBstrFromDate呢?这将使用区域设置(或者可选择地忽略一个区域设置),并且很可能更接近您想要的结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/115916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档