如何比较"月日期hh:mm:ss"格式的两个时间戳来检查+ ve或-ve值

use*_*448 3 c c++ comparison time

我检查了stackoverflow网站的答案,我没有得到,所以我在这里发布.

我的问题是:

如何比较格式的两个时间戳"Month Date hh:mm:ss"

我用C和C++编写程序,时间是可显示的字符串格式.

示例:

time1 = "Mar 21 11:51:20"
time2 = "Mar 21 10:20:05"
Run Code Online (Sandbox Code Playgroud)

我想比较time1和tme2并找出是否time2之后 time1,我需要输出为truefalse,如下所示:

 if time2 > time1 then 
       i need output as 1 
 or 
       0 or -1 anything
Run Code Online (Sandbox Code Playgroud)

我用过difftime(time2,time1),但它返回和diff之间的增量时间. 我想检查更大或没有. time1time2

如有任何帮助,请提前致谢

Gri*_*han 7

首先 使用difftime进行比较:

你可以简单地使用difftime()函数来比较时间和返回1-1如下:

int comparetime(time_t time1,time_t time2){
 return difftime(time1,time2) > 0.0 ? 1 : -1; 
} 
Run Code Online (Sandbox Code Playgroud)

SECOND- 将字符串转换为时间:

如果您很难转换 string time_t struct,您可以按顺序使用两个函数:

  1. char *strptime(const char *buf, const char *format, struct tm *tm);功能.将字符串转换为struct tm

    示例:要将日期时间字符串"Mar 21 11:51:20 AM"转换为struct tm需要三个合成字符串:

    %b:月份名称,可以是全名或缩写
    %d:月份日期[1-31].
    %r:区域设置的AM/PM格式的时间.如果在区域设置时间格式中不可用,则默认为POSIX时间AM/PM格式:%I:%M:%S %p.

  2. time_t mktime (struct tm * timeptr);转换struct tm*为的函数time_t

以下是我的示例程序:

#include <stdio.h>
#include <time.h>
int main(void){
    time_t t1, t2;
    struct tm *timeptr,tm1, tm2;
    char* time1 = "Mar 21 11:51:20 AM";
    char* time2 = "Mar 21 10:20:05 AM";

    //(1) convert `String to tm`:  
    if(strptime(time1, "%b %d %r",&tm1) == NULL)
            printf("\nstrptime failed\n");          
    if(strptime(time2, "%b %d %r",&tm2) == NULL)
            printf("\nstrptime failed\n");

    //(2)   convert `tm to time_t`:    
    t1 = mktime(&tm1);
    t2 = mktime(&tm2);  

     printf("\n t1 > t2 : %d", comparetime(t1, t2));
     printf("\n t2 > t1 : %d", comparetime(t2, t1));
     printf("\n");
     return 1;
}
Run Code Online (Sandbox Code Playgroud)

它可以按你的意愿工作:

 $ ./a.out 
 t1 > t2 : 1
 t2 > t1 : -1
Run Code Online (Sandbox Code Playgroud)

要计算两个日期之间的差异,请阅读:如何找到两个日期之间的差异,以小时为单位?