找出两个日期之间的小时差?

2023-12-05

例如,我可以通过查看这两个日期来计算它们的差异,但在程序中计算时我不知道。

日期:A 是2014/02/12(y/m/d) 13:26:33且 B 是2014/02/14(y/m/d) 11:35:06那么小时差是 46。


我假设你将时间存储为字符串:as"2014/02/12 13:26:33"

要计算时差,您需要使用:double difftime( time_t time_end, time_t time_beg);

功能difftime()将两个日历时间之间的差异计算为time_t对象(time_end - time_beg) 很快。如果time_end指之前的时间点time_beg那么结果是否定的。现在的问题是difftime()不接受字符串。我们可以将字符串转换为time_t结构体定义于time.h正如我在回答中所描述的那样,分为两个步骤:如何比较“月日 hh:mm:ss”格式的两个时间戳:

  1. Use char *strptime(const char *buf, const char *format, struct tm *tm);转换char*时间串入struct tm.

    The strptime()函数使用 format 指定的格式将 buf 指向的字符串转换为存储在 tm 指向的 tm 结构中的值。要使用它,您必须使用文档中指定的格式字符串:

    对于您的时间格式,我正在解释格式字符串:

    1. %Y:4 位数年份。可以为负数。
    2. %m:月份 [1-12]
    3. %d:一月中的某一天 [1–31]
    4. %T:带秒的 24 小时时间格式,与 %H:%M:%S 相同(您也可以显式使用 %H:%M:%S)

    所以函数调用如下:

    //          Y   M  D  H  M  S 
    strptime("2014/02/12 13:26:33", "%Y/%m/%d %T", &tmi) 
    

    Where tmi is a struct tm结构。

  2. 第二步是使用:time_t mktime(struct tm *time);

下面是我写的代码(阅读评论):

#define _GNU_SOURCE //to remove warning: implicit declaration of ‘strptime’
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main(void){
    char* time1 = "2014/02/12 13:26:33"; // end
    char* time2 = "2014/02/14 11:35:06"; // beg
    struct tm tm1, tm2; // intermediate datastructes 
    time_t t1, t2; // used in difftime

    //(1) convert `String to tm`:  (note: %T same as %H:%M:%S)  
    if(strptime(time1, "%Y/%m/%d %T", &tm1) == NULL)
       printf("\nstrptime failed-1\n");          
    if(strptime(time2, "%Y/%m/%d %T", &tm2) == NULL)
       printf("\nstrptime failed-2\n");

    //(2) convert `tm to time_t`:    
    t1 = mktime(&tm1);   
    t2 = mktime(&tm2);  
    //(3) Convert Seconds into hours
    double hours = difftime(t2, t1)/60/60;
    printf("%lf\n", hours);
    // printf("%d\n", (int)hours); // to display 46 
    return EXIT_SUCCESS;
}

编译并运行:

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

找出两个日期之间的小时差? 的相关文章

  • 将运算符 << 添加到 std::vector

    我想添加operator lt lt to std vector
  • 尝试了解使用服务打开对话框

    我已经阅读了有关使用 mvvm 模式打开对话框的讨论 我看过几个使用服务的示例 但我不明白所有部分如何组合在一起 我发布这个问题寻求指导 以了解我应该阅读哪些内容 以更好地理解我所缺少的内容 我将在下面发布我所拥有的内容 它确实有效 但从我
  • Grpc - 将消息从一个客户端发送到连接到同一服务器的另一个客户端

    是否可以将消息从一个客户端发送到连接到同一服务器的另一个客户端 我想将数据从一个客户端发送到服务器然后发送到特定客户端 我想我需要获取客户端 ID 但我不知道如何获取此 ID 以及如何从服务器将此消息发送到该客户端 我这里有一个样本 这是一
  • 将类对象放置在向量中?

    我注意到我可以将一个类放置在一个向量中 这是我的程序 我收到以下错误 out blackjack exe blackjack obj blackjack obj error LNK2019 unresolved external symbo
  • Environment.CurrentDirectory 与 System.IO.Directory.GetCurrentDirectory

    我正在编写一个 Net WinForms 并不断在调试和发布配置之间切换 并且有一些文件我需要任一配置才能访问 我想做的是将文件放在 BIN 文件夹中的公共目录中 这样它看起来像这样 MyProject Bin CommonFiles My
  • 按扩展名过滤搜索文件返回太多结果

    我正在开发一个 C 控制台应用程序 它必须管理 Windows 操作系统上的文件 我需要获取具有特定扩展名的文件名 列表 我找到了很多解决方案 最建议的是以下一种 HANDLE hFind WIN32 FIND DATA data hFin
  • 当事件button.click发生时,如何获取按钮名称/标签?

    我以编程方式制作按钮并将它们添加到堆栈面板中 以便每次用户导航到页面时按钮都会发生变化 我正在尝试做这样的事情 当我单击创建的按钮时 它将获取按钮的标签并转到正确的页面 但是 我无法使用 RoutedEventHandler 访问按钮元素
  • 传递 constexpr 对象

    我决定给予新的C 14的定义constexpr旋转并充分利用它 我决定编写一个小的编译时字符串解析器 然而 我正在努力保持我的对象constexpr将其传递给函数时 考虑以下代码 include
  • java中如何重新初始化int数组

    class PassingRefByVal static void Change int pArray pArray 0 888 This change affects the original element pArray new int
  • 如何将 .txt 文件中的数据转换为 xml? C#

    我在一个文本文件中有数千行数据 我想通过将其转换为更容易搜索的内容来轻松搜索 我希望 XML 或其他类型的大型数据结构 尽管我不确定它是否是最好的对于我的想法 每行的数据如下所示 第 31 册 托马斯 乔治 32 34 154 每本书都不是
  • 在 C# 中,如何根据在 gridview 行中单击的按钮引用特定产品记录

    我有一个显示产品网格视图的页面 该表内有一列 其中有一个名为 详细信息 的超链接 我想这样做 以便如果用户单击该特定产品的详细信息单元格 将打开一个新页面 提供有关该产品的更多信息 我不确定如何确定哪个Product记录链接的详细信息以及我
  • 不同 C++ 文件中的相同类名

    如果两个 C 文件具有相同名称的类的不同定义 那么当它们被编译和链接时 即使没有警告也会抛出一些东西 例如 a cc class Student public std string foo return A void foo a Stude
  • C++中判断unicode字符是全角还是半角

    我正在编写一个终端 控制台 应用程序 该应用程序应该包装任意 unicode 文本 终端通常使用等宽 固定宽度 字体 因此要换行文本 只需计算字符数并观察单词是否适合一行并采取相应的操作 问题是 Unicode 表中的全角字符在终端中占用了
  • 如何将AVFrame转换为glTexImage2D使用的纹理?

    如您所知 AVFrame 有 2 个属性 pFrame gt data pFrame gt linesize 当我从视频 sdcard test mp4 android平台 读取帧后 并将其转换为RGB AVFrame副 img conve
  • 将 Word 转换为 PDF - 禁用“保存”对话框

    我有一个用 C 编写的 Word 到 PDF 转换器 除了一件事之外 它工作得很好 有时 在某些 Word 文件上 后台会出现一条消息保存源文件中的更改 gt 是 否 取消 但我没有对源文件进行任何更改 我只想从 Word 文件创建 PDF
  • 将函数参数类型提取为参数包

    这是一个后续问题 解包 元组以调用匹配的函数指针 https stackoverflow com questions 7858817 unpacking a tuple to call a matching function pointer
  • 如何解压 msgpack 文件?

    我正在将 msgpack 编码的数据写入文件 在编写时 我只是使用 C API 的 fbuffer 如 我为示例删除了所有错误处理 FILE fp fopen filename ab msgpack packer pk msgpack pa
  • 代码中的.net Access Forms身份验证“超时”值

    我正在向我的应用程序添加注销过期警报 并希望从我的代码访问我的 web config 表单身份验证 超时 值 我有什么办法可以做到这一点吗 我认为您可以从 FormsAuthentication 静态类方法中读取它 这比直接读取 web c
  • Visual Studio 2015 - Web 项目上缺少共享项目参考选项卡

    我从 MSDN 订阅升级到 Visual Studio 2015 因为我非常兴奋地阅读有关共享项目的信息 当我们想要做的只是重用代码时 不再需要在依赖项中管理 21382 个 nuget 包 所以我构建了一个测试共享项目 其中包含一些代码
  • 如何在 sql azure 上运行 aspnet_regsql? [复制]

    这个问题在这里已经有答案了 可能的重复 将 ASP NET 成员资格数据库迁移到 SQL Azure https stackoverflow com questions 10140774 migrating asp net membersh

随机推荐

  • CakePHP 3.0 没有 intl 扩展就无法运行

    我正在尝试在共享主机上安装并运行 CakePHP 3 0 项目 然而 CakePHP 3 0 需要php intl扩展 但托管提供商拒绝我安装 启用intl共享主机上的扩展 我怎样才能运行 CakePHP 3 0 而不intl扩大 有没有办
  • NetBeans。禁用错误检查下划线

    如何在 NetBeans 6 9 1 中禁用错误 检查 源代码中出现红线是很烦人的 这类似于NetBeans 关闭 红色波浪下划线 如何 但我想完全禁用下划线 而不仅仅是在打字时 它错误地解析 PHP 源并忽略语法错误 Netbeans 有
  • 比较 Python Pandas DataFrame 的匹配行

    我有这个数据框 df1 在熊猫中 df1 pd DataFrame np random rand 10 4 columns list ABCD print df1 A B C D 0 860379 0 726956 0 394529 0 8
  • SSL 错误/RSA 预主密钥错误

    有人知道 PayPal 沙箱中遇到的错误是什么问题吗 上次运行良好几个月 我们更换了服务器 IPN 停止运行 我们不确定是 PayPal 问题还是我们的问题 在 Web 服务器访问日志中 没有显示 PayPal IPN POST 日志条目
  • 将 MultiLabelDataset 转换为 Guava Multimap 以进行打印/检查

    我正在使用以下程序 public static void main String args throws Exception String input args 0 InputStream is new BufferedInputStrea
  • 局部变量需要声明为final

    我收到错误 局部变量框是从内部类内部访问的 需要声明为最终的 这看起来不错 但我真的不认为这是最好的解决方案 所以我希望其他人可以帮助我 这是我的代码 public void showPublisherBox JComboBox box i
  • 提供 cin 输入的默认值

    我的应用程序使用读取用户输入std cin溪流 在一个地方 我想提供默认输入并让用户按原样接受它 通过按 Enter 键 或在继续之前修改它 通过使用退格键删除旧字符并添加新文本 我知道字符可以直接放入cin rdbuf 但这并不是我想要实
  • window.outerWidth VS $(window).outerWidth()

    我只是好奇两者之间有什么区别window outerWidth and window outerWidth 是 如果有的话 我在谷歌上找不到太多关于这方面的信息 所以我想我会吸引大众 这只是一个一般性问题 而不是一个具体问题 Jquery的
  • 选择不包含某些特定类的 :first-child 或 :last-child

    假设我们有一个包含 5 个项目的列表 并且我们想要应用一些具体款式到第一个或最后一个孩子 但是这个列表的功能需要通过 jQuery 应用一个类 我们称之为 hide 这将设置一个display none 关于目标项目 The 具体款式我一开
  • 从使用 dlopen 加载的共享库引用全局符号

    我有一个共享库 我想从主程序访问符号 例如 main c include
  • 如何删除

    标签顶部的空间/将包含的文本与容器顶部对齐?

    这无疑是一个愚蠢的问题 但我今天过得很糟糕 这让我很困惑 如果您查看http jsfiddle net E6kGP 1 然后您可以看到两个相邻的简单 div 每个 div 都包含一个 p 标签 每个标签具有不同的字体大小和匹配的行高 p 容
  • org.apache.hadoop.mapreduce.counters.LimitExceededException:计数器太多:121 max=120

    我正在运行一个 hadoop 作业 来自 oozie 它有很少的计数器和多输出 我收到如下错误 org apache hadoop mapreduce counters LimitExceededException 计数器太多 121 ma
  • 网络服务器的实现[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我想用纯 Java 实现我自己的网络服务器 Web 服务器应该仅支持静态资源 即 html js css 图片 电影等 您能推荐一个关于如何实现这样
  • 无法在字段值中使用 1(int 类型)作为 *int 类型

    为什么会产生错误 一样的int除了 with 指针 type Gim struct Active int yesVar Gim Active 1 error Cannot use 1 type int as type int in fiel
  • 如何在c中实现定时器?

    我们想在Linux平台下的C程序中添加一个定时器 我们正在尝试发送数据包 并且希望了解 1 分钟内发送了多少数据包 我们希望计时器与while正在执行发送数据包的循环 例如 while 1 send packets 该循环将继续发送数据包
  • Angular2 中使用 Angular-CLI 的环境特定服务端点

    我正在为我的 Angular2 项目使用 Angular CLI 我通过 angular2 服务调用后端 ajax 服务 我对于不同的任务有不同的服务端点 URL 我想让这些服务环境变得有意义 假设我有两个服务 客户服务 https loc
  • Boost Spirit 可选解析器和回溯

    为什么这个解析器离开 b 在属性中 即使选项不匹配 using namespace boost spirit qi std string str abc auto a char a auto b char b qi rule
  • 拥有值的一般方法(不指定“Rc”或“Box”)

    一般来说 当您不想指定时 是否有一个针对拥有值的枚举 特征how确切地说 该值是拥有的 无论共享与否 但您只想拥有它 我需要将对闭包的引用存储在结构中 这意味着它们必须与结构一样存在 当然 我无法复制它们 因此它们需要作为参考 但我不想做出
  • 如何访问向量中的最后一个值?

    假设我有一个嵌套在具有一层或两层的数据框中的向量 有没有一种快速而肮脏的方法来访问最后一个值 而不使用length 功能 类似 PERL 的东西 特殊变量 所以我想要这样的东西 dat vec1 vec2 代替 dat vec1 vec2
  • 找出两个日期之间的小时差?

    例如 我可以通过查看这两个日期来计算它们的差异 但在程序中计算时我不知道 日期 A 是2014 02 12 y m d 13 26 33且 B 是2014 02 14 y m d 11 35 06那么小时差是 46 我假设你将时间存储为字符