检查两个 TDateTime 变量

2023-12-05

我正在使用 C++ Builder 并有以下问题:

我想检测一个日期/时间是否晚于另一个日期/时间以及晚了多少。

这是我当前的代码:

TDateTime testFirstDate("11/09/2012");
TDateTime testFirstTime("14:00");

TDateTime testSecondDate("12/09/2012");
TDateTime testSecondTime("16:00");

TDateTime testCombined1 = testFirstDate + testFirstTime;
TDateTime testCombined2 = testSecondDate + testSecondTime;

TDateTime testDateDifference = testSecondDate - testFirstDate;
std::cout << testDateDifference;

在上面的示例中,打印出以下内容:31/12/1899

两个值之间仅相差 1 天。为什么打印的是:31/12/1899,而不是类似:1?


相差1天22小时。

TDateTime在 Delphi 和 C++ Builder 中是双精度型,其中整数部分(小数点左边的部分)存储自 1899 年 12 月 30 日基准日期以来的天数(见下面的注释),小数部分(小数点右边的部分)是时间。

减法后您看到的 1899 是因为您的时间少于一整天,因此数字的整个部分为零,正如我提到的零日期是 1899 年 12 月的基准日期。比基准日期晚 1 天(当表示为TDateTime,该日期被解释为 1899 年 12 月 31 日。

22小时的时间部分大约是0.9167(实际上,0.916666666666667),代表一天的 22/24。

Delphi 的运行时库包含一个名为DateUtils,IIRC 也可用于 C++ Builder(有一个头文件),其中包含可能对您有帮助的函数,例如DaysBetween您可能会发现有用。有可用的 C++ 示例here.

至于平等(一个日期在另一个日期之后),您可以使用标准>, <, >=, <=, !=, and ==运营商。我也在下面演示了这一点。

这是一个简单的示例(在 Delphi 中,因为我在这台机器上没有安装 C++ Builder),可以解释:

program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils, DateUtils;

var
  StartDate, EndDate, Diff: TDateTime;
begin
  try
    { TODO -oUser -cConsole Main : Insert code here }
    // Base date, formatted in US date format
    WriteLn('BaseDate: ', FormatDateTime('mm/dd/yyyy hh:nn:ss', 0));

    StartDate := EncodeDateTime(2012, 9, 11, 14, 0, 0, 0);
    EndDate := EncodeDateTime(2012, 9, 12, 16, 0, 0, 0);
    Diff := EndDate - StartDate;

    WriteLn('Diff as String: ', DateToStr(Diff));
    WriteLn('Diff as Double: ', Diff);
    WriteLn('DaysBetween: ', DaysBetween(EndDate, StartDate));

    // Equality
    WriteLn('EndDate after StartDate`, EndDate > StartDate);
    RegEx.Free;
    ReadLn;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

这会产生以下输出:

BaseDate: 12/30/1899 00:00:00
Diff as String: 12/31/1899
Diff as Double:  1.08333333332848E+0000
DaysBetween: 1
EndDate after StartDate: TRUE

注意:基准日期是由 Microsoft 为 COM 建立的,出于兼容性原因,Delphi/C++ Builder 采用了它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检查两个 TDateTime 变量 的相关文章

  • 在 Vulkan 中,图形队列系列与当前队列系列分离是否有益?

    据我所知 队列系列可能支持呈现到屏幕但不支持图形 假设我有一个同时支持图形和呈现的队列系列 以及另一个仅支持呈现的队列系列 我应该为两个进程使用第一个队列系列 还是应该将第一个队列系列委托给图形 将后者委托给呈现 或者这两种方法之间没有明显
  • C# SmtpClient编程中如何设置带有中文的附件文件名?

    我的代码如下 ContentType ct new ContentType ct MediaType MediaTypeNames Application Octet ct Name 这是一个很长的中文文件名希望能用它在附件名中 Doc A
  • 使用 ADAL v3 使用 ClientID 对 Dynamics 365 进行身份验证

    我正在尝试对我们的在线 Dynamics CRM 进行身份验证以使用可用的 API 我能找到的唯一关于执行此操作的官方文档是 https learn microsoft com en us dynamics365 customer enga
  • 关于逻辑/算法的想法以及如何防止线程写入 Sql Server 中的竞争

    我有以下逻辑 public void InQueueTable DataTable Table int incomingRows Table Rows Count if incomingRows gt RowsThreshold async
  • C# 中的 Stack<> 实现

    我最近一直在实现递归目录搜索实现 并且使用堆栈来跟踪路径元素 当我使用 string Join 连接路径元素时 我发现它们被颠倒了 当我调试该方法时 我查看了堆栈 发现堆栈内部数组中的元素本身是相反的 即最近 Push 的元素位于内部数组的
  • 无法继承形状

    为什么我不能使用继承 a 的类Shapes class http msdn microsoft com en us library ms604615 28v vs 90 29 我需要延长Rectangle具有一些方法的类 但我想以与使用相同
  • Boost ASIO 串行写入十六进制值

    我正在使用 ubuntu 通过串行端口与设备进行通信 所有消息都必须是十六进制值 我已经在 Windows 环境中使用白蚁测试了通信设置 并得到了我期望的响应 但在使用 Boost asio 时我无法得到任何响应 以下是我设置串口的方法 b
  • 如何在 C# 中将 Json 转换为对象

    我想将 Json 转换为 C 中的对象 这里的 Json 是 值 e920ce0f e3f5 4c6f 8e3d d2fbc51990e4 如何使用 Object 问题看似愚蠢 但其实并不那么愚蠢 我没有简单的 Json 我有 IEnume
  • Selenium - C# - Webdriver - 无法找到元素

    在 C 中使用 selenium 我试图打开浏览器 导航到 Google 并找到文本搜索字段 我尝试下面的 IWebDriver driver new InternetExplorerDriver C driver Navigate GoT
  • 2个对象,完全相同(除了命名空间)c#

    我正在使用第三方的一组网络服务 但遇到了一个小障碍 在我手动创建将每个属性从源复制到目标的方法之前 我想我应该在这里寻求更好的解决方案 我有 2 个对象 一个是 Customer CustomerParty 类型 另一个是 Appointm
  • 为什么这个 makefile 在“make clean”上执行目标

    这是我当前的 makefile CXX g CXXFLAGS Wall O3 LDFLAGS TARGET testcpp SRCS main cpp object cpp foo cpp OBJS SRCS cpp o DEPS SRCS
  • Linux 上的 RTLD_LOCAL 和dynamic_cast

    我们有一个由应用程序中的一些共享库构成的插件 我们需要在应用程序运行时更新它 出于性能原因 我们在卸载旧插件之前加载并开始使用新插件 并且只有当所有线程都使用旧插件完成后 我们才卸载它 由于新插件和旧插件的库具有相同的符号 我们dlopen
  • 测量进程消耗的 CPU 时钟

    我用 C 语言编写了一个程序 它是作为研究结果创建的程序 我想计算程序消耗的确切 CPU 周期 精确的循环次数 知道我怎样才能找到它吗 The valgrind tool cachegrind valgrind tool cachegrin
  • 保证复制省略是否适用于函数参数?

    如果我理解正确的话 从 C 17 开始 这段代码现在要求不进行任何复制 Foo myfunc void return Foo auto foo myfunc no copy 函数参数也是如此吗 下面的代码中的副本会被优化掉吗 Foo myf
  • wordexp 失败时我们需要调用 wordfree 吗?

    wordexp 失败时我们需要调用 wordfree 吗 在某些情况下 调用 wordfree 似乎会出现段错误 例如 当 wordfree 返回字符串为 foo bar 的错误代码时 这在手册页中并不清楚 我已经看到在某些错误情况下使用了
  • .NET 和 Mono 之间的开发差异

    我正在研究 Mono 和 NET C 将来当项目开发时我们需要在 Linux 服务器上运行代码 此时我一直在研究 ASP NET MVC 和 Mono 我运行 Ubuntu 发行版 想要开发 Web 应用程序 其他一些开发人员使用 Wind
  • Xamarin Forms Binding - 访问父属性

    我无法访问页面的 ViewModel 属性以便将其绑定到 IsVisible 属性 如果我不设置 BindingContext 我只能绑定它 有没有办法可以在设置 BindingContext 的同时访问页面的 viewmodel root
  • C:设置变量范围内所有位的最有效方法

    让我们来int举个例子 int SetBitWithinRange const unsigned from const unsigned to To be implemented SetBitWithinRange应该返回一个int其中所有
  • 如何高效计算连续数的数字积?

    我正在尝试计算数字序列中每个数字的数字乘积 例如 21 22 23 98 99 将会 2 4 6 72 81 为了降低复杂性 我只会考虑 连续的数字 http simple wikipedia org wiki Consecutive in
  • winform c# 中的弹出窗口

    我正在开发一个需要弹出窗口的项目 但问题是我还希望能够通过表单设计器在此弹出窗口中添加文本框等 所以基本上我有一个按钮 当您单击它时 它将打开我在表单设计器中设计的另一个窗口 我一直在谷歌搜索 但还没有找到我需要的东西 所以我希望你们能帮助

随机推荐

  • iOS - setObject 与 Synchronize

    新手问题 如果我将一个对象设置到 NSUserDefault 中 我是否还需要同步以确保该对象永久返回到 NSUserDefault 数据库中 我想我要问的是 setobject 是将对象永久放回到数据库中还是放入需要同步以确保永久存储的临
  • 如何使 tr1::array 分配对齐内存?

    您可以分配一个 std vector 它通过定义自己的分配器来分配对齐的堆内存 您可以使用 declspecalign 在堆栈上分配 C 样式数组 但是你能声明一个 tr1 array 来保证索引零处的元素对齐吗 tr1 array and
  • Net Core:实体框架中的通用存储库主 ID 关键性能

    我们正在审查通用存储库模式中的两种不同方法 目前 想要将主键映射到 Id 这样做的目的是映射到使用 Id 的通用存储库接口 下面提供两种解决方案 FindPrimaryKey Properties 对性能有何影响 在尝试查找主键时是否会导致
  • Python requests 模块多线程

    有没有可能使用多处理接口来加速我的代码 问题是这个接口使用了map函数 它只适用于1个函数 但我的代码有3个功能 我尝试将我的功能合并为一个 但没有成功 我的脚本从文件中读取站点的 URL 并对其执行 3 个功能 For 循环使它非常慢 因
  • 对列列表执行不同的函数,并使用 data.table 自动生成新的列名称

    我的 Shiny 应用程序中有一个部分可以生成列表 列表的名称是dataframe我们将计算 列表项包含我们想要的计算 想要这样做 apply to all list names for listname column x 计算functi
  • 使用 PHP 读取文件 - fopen/fread

  • 求矩阵元素组合的最小和

    昨天我的一位朋友带着一个问题来找我寻求解决方案 问题 我有一个matrix n x m 我需要找出从这些矩阵元素中可以产生的最小总和 条件是 计数只能从左上角的单元格开始 和 应在右下单元格结束 该算法应该计算所有可能的路径 这样我就需要找
  • 返回每个其他元素的列表的方案过程

    虽然我认为我已经完成了 90 但在计划中实现这个程序时遇到了一些麻烦 不幸的是 我需要对此说得有点含糊 因为这是一项家庭作业 我要 A B C D 返回 B D 但我收到一个错误 指出 The object returned as an a
  • SFTP 的 .NET 开源代码? [复制]

    这个问题在这里已经有答案了 我用 google 搜索了很多 但找不到 NET 中 SFTP 的单个开源实现 我得到的只是 SFTP 的第 3 方组件 谁能帮助我在 NET 中实现 SFTP See 这个问题 and shrpssh 这是公认
  • Android - 将文本文件保存到哪里?

    我正在使用 Adob e AIR 构建一个 Android 应用程序 允许用户导入和导出 txt 文件 作为保存 txt 文件的默认路径的最佳文件夹是什么 Thanks 您应该将文件保存在外部 SD 卡上 只需在下面创建一个自己的目录环境
  • Discord.py 如何制作掷骰子命令

    大家好 我正在用 Python 编写一个 Discord 机器人 我想编写一个掷骰子命令 我认为我做错了什么 这是代码 client command async def rolldice ctx dice4 1 2 3 4 dice6 1
  • 如何在 UICollectionViewCell 上设置 UILabel?

    我已经用自定义和标准这样做了几十次UITableView细胞 我所有的插座都已连接 这UILabel是我的子视图UICollectionViewCell在IB中 我的UICollectionViewCell对象继承了身份检查器中正确的类 我
  • jTable单元格背景颜色

    我正在尝试使用渲染器为 jTable 的单元格着色 但它们工作得不好 因为它们滞后于表格并使其无法看到 这是我的代码 TableCellRenderer Tcr jTable1 getCellRenderer x y Component c
  • 循环创建多个数据帧

    我有一个列表 每个条目都是一个公司名称 companies AA AAPL BA YHOO 我想为列表中的每个条目创建一个新的数据框 就像是 伪代码 for c in companies c pd DataFrame 我已经寻找一种方法来做
  • jQuery JSON 到字符串?

    我需要获取我的对象并将其作为表示 JSON 的字符串存储在变量中 而不是使用 JSON json 字符串并使用 parseJSON 我正在处理的库需要格式错误的 JSON 类型 因此我需要对其进行修改才能使其正常工作 最好的方法是什么 Ed
  • 在 C++ 中使用没有伙伴类/Cpp 文件的头文件是否实用

    我最近选择了 C 作为我课程的一部分 并且我试图更深入地了解标头和类之间的合作关系 从我查找过的头文件中的每个示例或教程中 它们都使用带有构造函数的类文件 然后跟进方法 如果包含它们 但是我想知道是否可以只使用头文件来保存一组相关函数 而无
  • 每当串行端口有新数据时,就从串行数据更新 tkinter 标签 python 3.x

    我遇到了这个问题 我无法在标签上显示任何值 只要有新数据从串行端口传入 我就想不断更新它 我是 python 新手 真的需要帮助 import tkinter import tkinter messagebox import serial
  • GLSL 双精度角度、三角函数和指数函数解决方法

    在 GLSL 中 可以找到对双精度变量和运算的基本支持here 然而他们也提到 角度 三角学和指数的双精度版本 不支持功能 有没有一个简单的解决方法 或者我必须从头开始编写自己的函数 这个链接似乎是最好的答案 所以 是的 您需要为这些函数创
  • 查找其他 Android 应用产生了多少网络流量

    我正在尝试制作一个后台服务 该服务应该测量各种应用程序的流量使用情况 以便能够向用户显示哪些应用程序消耗最多的数据流量 我发现 Spare Parts 应用程序正是这样做的 但在 1 6 Dell Streak 设备上安装它后 我总是收到
  • 检查两个 TDateTime 变量

    我正在使用 C Builder 并有以下问题 我想检测一个日期 时间是否晚于另一个日期 时间以及晚了多少 这是我当前的代码 TDateTime testFirstDate 11 09 2012 TDateTime testFirstTime