问题标签 [coledatetime]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
763 浏览

c++ - COleDateTimeSpan::GetTotalSeconds() 返回秒 + 10281600

我成功地创建了 COleDateTimes,然后减去它们以创建一个 COleDateTimeSpan。出于某种原因,调用 GetTotalSeconds() 方法突然开始返回一个巨大的数字,这似乎是秒数加上 10281600。我相信这在以前是有效的。

这是我正在使用的代码:

m_trace.Trace()是我的追踪方法。奇怪的是,运行 Format() 表明 COleDateTimeSpan 所持有的实际值没有问题,从跟踪结果可以看出:

不太清楚如何处理这个......任何帮助将不胜感激。

0 投票
2 回答
1939 浏览

c++ - C++ 美国日期的 COleDateTime 中 LCID 的正确用法是什么

我需要解析一个美国日期字符串来提取日期。

我希望这会返回 2014 年 10 月 1 日,但它会返回 2014 年 10 月 10 日

有人可以告诉我我在这里做错了什么吗?

0 投票
1 回答
180 浏览

c# - System::DateTime 返回值 1/1/1 00:00:00

我正在尝试从 DateTimePicker 控件获取日期和时间,然后将 datum 的值设置为该值。基准是 System::DateTime (C#)。但是数据是这个“1/1/1 00:00:00”有什么问题?

0 投票
0 回答
760 浏览

c++ - ColeDateTime::Format languagespecific 不同的字段

我想将 COleDateTime 格式化为 CString,所以我使用

由于我的程序是多语言的,GetCurrentLocaleID 为我提供了当前选择的 LCID(不是在 Windows 中,而是在我的程序中)。所以上面根据所选的用户语言为我提供了正确格式的字符串,但它始终采用“日期与年份 + 时间与秒”的格式。我认为这是根据 Windows 区域设置的日期的短格式和时间的长格式。

我能做些什么来获得字符串 - 年份只有 2 个数字?- 完全没有年份?- 没有秒的时间部分?

是否有任何开关COleDateTime::Format可以让我将年份作为 2 位数字,没有秒的时间,但保持由 ? 指定的字段顺序和分隔符LCID

当然,我不想更改任何 windows-regional-settings 来执行此操作,并且我不想使用任何固定的格式字符串,_T("%d.%m.%Y %H:%M:%S")因为这会破坏特定于语言的字段和分隔符的顺序。

感谢您的提示和回答

米查

0 投票
1 回答
1258 浏览

c++ - 在不使用 VariantTimeToSystemTime 的情况下将 OLE 自动化日期 (OADate) double 转换为 struct tm

我正在用不使用 MFC/ATL 的主要标准 C++ (VS2010) 编写一个 Windows DLL。

父模块确实使用 MFC 并将 a 传递COleDateTime.m_dt给我的 DLL,它以double. 我相信这是一个 OLE 自动化日期,也称为 OADate。

我想将它转换为任何类型的标准结构(tm ...),它有天、小时等,而不会将 MFC、OLE 等拉入我的 DLL。

之前有人问过这个问题(Convert Date/Time (as Double) to struct* tm in C++)但是,答案总是 using VariantTimeToSystemTime(),这忽略了该问题的重点——不使用 MFC / OLE 等。

VariantTimeToSystemTime 的要求是:

头文件 - OleAuto.h
库 - OleAut32.lib
DLL - OleAut32.dll

我的 DLL 目前基本上没有依赖关系,所以我不希望将 OleAut32.dll 拉入这一转换。

到目前为止,我发现的最好的东西就是这个C# mono code,我可以将它转换为 C++。

0 投票
1 回答
224 浏览

c++ - COleDateTime 在使用 time_t 构造时添加一个小时

我有一个 struct tm使用 转换为 UNIX time_t 的对象,mktime当传递给 的构造函数时,它COleDateTime似乎增加了一个小时来考虑夏令时(英国时间),即使文档COleDateTime表明它忽略了 DST。

如果我创建我的时间SYSTEMTIME并将该对象传递给COleDateTime问题就会消失。有谁知道为什么会发生这种情况?这是来自遗留代码,因此将所有内容更改为SYSTEMTIME可能不是解决方案。

这是我的示例代码:

0 投票
2 回答
148 浏览

mfc - 获取 COleDateTime::Format 以返回波兰月“January”的“stycznia”而不是“styczeń”

我有这种方法可以将语言环境设置为波兰语:

为简洁起见,我已经删掉了其他语言。现在,当我格式化一个COleDateTime对象并显示月份时,比如一月,它显示为:

斯蒂琴

但我想将其显示为:

石竹

是否有区域设置来调整COleDateTime::Format方法或区域返回的月份值?

否则我将不得不手动添加一些东西来覆盖。

我希望返回的月份是:

  1. 石竹
  2. 卢特戈
  3. 马卡
  4. 桂花
  5. 玛雅
  6. 切尔瓦卡
  7. 利普卡
  8. 癔症
  9. 仙人掌
  10. 帕兹杰尔尼卡
  11. 列表小册子
  12. 格鲁德尼亚

更新

根据here它指出:

某些语言,例如芬兰语、德语、波兰语和俄语,有多种名词形式。如果您打算使用系统提供的本地化名称,请进行语言学家检查以确保您在正确的上下文中使用它们。Windows 带有波兰语和俄语月份名称的主格和属格形式;形式根据月份名称在字符串中相对于日期名称的位置而变化。Windows 在由空值分隔的单个字符串中返回这两种形式。对于所有其他语言,系统仅携带一种形式的每月名称或日期名称

现在,这就是我实际格式化日期字符串的方式(因为我支持 40 多种语言,这有点棘手。所以,(对于英语)我从这个格式字符串开始:

  1. %1月份
  2. %2!d!第一天的价值。
  3. %3!d!第二天的值。

如果我的约会需要跨越两个月,我有:

  1. %1月份值。
  2. %2!d!第一天的价值。
  3. %3第二个月的值。
  4. %3!d!第二天的值。

上面是这样使用的:

对于Polish,我各自的格式字符串是:

所以,我可以看到,因为我正在格式化日期字符串,FormatMessage并且仅使用该COleDateTime::Format方法来解析它可能是问题原因的月份

由于我在日期字符串中有两个日期,我不能只使用一个日期格式 API 调用(因为我的日期字符串代表一周跨度)。

所以我检查了:

它没有任何区别。所以我尝试了这个:

它没有任何区别。它仍然以与以前相同的方式显示日期。即使它确实正确显示了日期,它也不会考虑来自两个 COleDateTime 对象的日期范围。

使困惑。

更新 2:

也试过:

只是不会显示变体。

更新 3

我可以让它显示正确日期的唯一方法是这样的:

那么月份是正确的。现在在我提到的文章中指出:

Windows 在由空值分隔的单个字符串中返回这两种形式。

我什至无法弄清楚如何访问它。

0 投票
1 回答
496 浏览

c++ - 考虑到闰年,向 COledateTime 添加一年的正确方法是什么?

我有这个代码:

上述代码昨天(2020 年 2 月 29 日)失败,因为datEnd导致2021 年 2 月 29 日无效。

datStart在考虑闰年的情况下安全地增加一年的正确方法是什么?

C# 有:

MFC/C++ 的等价物是什么?

一种可能性是:

但由于闰年有 366 天,它仍然存在潜在缺陷。那么正确的方法是什么?

我看到这个类似的问题:

C++ 添加 1 年至今

这意味着使用boost. 尽管从未将其用于日期操作,但我的项目确实有所提升。想知道这是否可以与COleDateTime对象一起使用?

使用boost

不编译。

0 投票
1 回答
147 浏览

c++ - COleDateTime 不可靠的 DateTime 解析

我正在尝试使用类ParseDateTime提供的方法解析日期COleDateTime。但是在同一个程序中解析两个不同的日期会返回不一致的月份值。

代码片段:

不一致的结果:

if strCreatedDate= "10/7/2020" (mm.dd.yyyy格式) then dtCreated.GetMonth()= 7 (但应该是 10

if strCreatedDate= "7/29/2020" ( mm.dd.yyyy格式) then dtCreated.GetMonth()= 7 (在这种情况下是正确的)

更新:

变量中存在的日期值strCreatedDate可以是“dd.mm.yyyy”或“mm.dd.yyyy”格式。但我确实在单独的变量中提供了有关可用数据格式的信息。根据格式,我想COleDateTime正确解析 DateTime 字符串。我怎样才能做到这一点?

0 投票
1 回答
30 浏览

visual-c++ - COleDateTime::SetDateTime 和 noexcept(代码分析)

请参阅此代码:

我的代码分析说我可以添加noexcept(我做了)。但我决定再调查一下。我注意到它SetDateTime返回一个值:

Zero如果这个COleDateTime对象的值设置成功;否则,1。此返回值基于DateTimeStatus枚举类型。有关详细信息,请参阅SetStatus成员函数。

对于后一个函数 ( SetStatus),它声明:

status参数值由DateTimeStatus枚举类型定义,该类型在COleDateTime中定义。详情请参阅COleDateTime::GetStatus

现在,文档GetStatus被记录为具有以下定义:

DateTimeStatus GetStatus() const throw();

因此,如果出现错误,它会引发异常。因此,我决定查看 MFC 源代码SetDateTime

它用于ConvertSystemTimeToVariantTime设置状态。使用:

使用

在这一点上,我迷路了。简而言之,我假设SetDateTime 不会引发异常。


我明白这一点,如果我决定GetStatus在子句内部进行调用,if那么我们确实有可能引发异常。