首页 > 系统相关 >linux时间比较大小----亲测OK

linux时间比较大小----亲测OK

时间:2023-11-30 13:04:33浏览次数:46  
标签:__ OK linux ---- tm 时间 str time return

(Linux_C环境编程:时间日期函数总结)

// TimeUtil.h
#ifndef __TIME_UTIL_H__
#define __TIME_UTIL_H__



#ifdef __cplusplus             //告诉编译器,这部分代码按C语言的格式进行编译,而不是C++的
extern "C"{
#endif


int UTIL_is_time_expired(string from, string to);

#ifdef __cplusplus             //告诉编译器,这部分代码按C语言的格式进行编译,而不是C++的
}
#endif

#endif /* __TIME_UTIL_H__ */
// TimeUtil.cpp
#include <string>
using namespace std;

#include <stdio.h>
#include <string.h>
#include <time.h>
//#include "liblicense_log.h"
#include "TimeUtil.h"

#define DEBUG_TIMEUTIL (1)

#define print_ln(log_level, fmt, ...) do {printf("(%s|%d)" fmt "\r\n", __func__, __LINE__, ##__VA_ARGS__); fflush(stdout);} while(0)
#define xxxx_free(a) do {if(a) {free((void *)a); (a) = NULL;}} while(0)


/*****************************************************************

    本地时间转time_t

    本地时间 "2022-02-27 00:57:30"
    本地时间 "2022-02-27"


    参数 : time_str, 时间字符串

     return :  0, 成功
              -1, 失败

*****************************************************************/
static time_t str_to_time_t(string time_str)
{
    struct tm tm;
    time_t ret_seconds;

    memset(&tm, 0, sizeof(struct tm));
    strptime(time_str.c_str(), "%Y-%m-%d %H:%M:%S", &tm);

    ret_seconds = timelocal(&tm); // timelocal 函数都是线程安全的
    //printf("timelocal():%d\n", ret_seconds);

    return ret_seconds;
}


/*****************************************************************

    获取此刻本地时间



    参数 : 无

    return : 返回此刻时间 time_t

*****************************************************************/
static time_t get_now_time_t(void)
{
    return time(NULL);
}

static string print_time_t(time_t &tm)
{
    struct tm *p_tm = NULL;
    char buf[256] = {0};

    p_tm = localtime(&tm);
    strftime(buf, sizeof(buf)-1, "%F %T", p_tm);
    //printf("local time=%s\n", buf);

    return buf;
}


/*****************************************************************

    比较当前时间是否在(from, to]时间内(本地时间)


    时间示例:
    本地时间 "2022-02-27 00:57:30"
    本地时间 "2022-02-27"


    参数 : from, 开始时间, 参考时间示例
           to, 结束时间, 参考时间示例

     return :  0, 当前时间处在有效期内
              -1, 当前时间处在开始时间之前
               1, 当前时间处在结束时间之后(过期)
              -2, 失败

*****************************************************************/
int UTIL_is_time_expired(string from, string to)
{
    time_t time_from = str_to_time_t(from.c_str());
    time_t time_to = str_to_time_t(to.c_str());
    time_t time_curr = get_now_time_t();

    xxxx_print_ln(xxxx_INFO, "DateFrom=%s, GraceTo=%s, curr=%s", from.c_str(), to.c_str(), print_time_t(time_curr).c_str());
    xxxx_print_ln(xxxx_INFO, "DateFrom=%ld, GraceTo=%ld, curr=%ld", time_from, time_to, time_curr);

    if (time_from >= time_to) {
        return -2;
    }

    if (time_curr <= time_from) {
        return -1;
    } else if (time_curr <= time_to) {
        return 0;
    } else if (time_to < time_curr) {
        return 1;
    }

    return -2;
}

#if DEBUG_TIMEUTIL
static string get_now()
{
    time_t now;
    struct tm *p_tm = NULL;
    char buf[256] = {0};

    now = time(NULL);
    p_tm = localtime(&now);
    strftime(buf, sizeof(buf)-1, "%F %T %a", p_tm);
    printf("local time=%s\n", buf);

    return buf;
}


int test1()
{
    time_t to = str_to_time_t("2023-11-14 19:53:00");
    time_t curr = time(NULL);

    printf("curr=%d\n", curr);
    printf("to=%d\n", to);
    printf("curr-to=%d\n", curr - to);
    printf("curr-to=%.0f\n", difftime(curr, to));

    return 0;
}

int test2()
{
    time_t to = str_to_time_t("2023-11-15");
    time_t curr = time(NULL);

    printf("curr=%d\n", curr);
    printf("to=%d\n", to);
    printf("curr-to=%d\n", curr - to);
    printf("curr-to=%.0f\n", difftime(curr, to));

    return 0;
}

int test3()
{
    string from = "2023-11-14 20:14:30";
    string to = "2023-11-14 20:15:00";

    printf("from=%s\n", from.c_str());
    printf("to  =%s\n", to.c_str());
    printf("ret=%d\n", UTIL_is_time_expired(from, to));

    return 0;
}

int main()
{
    test1();
    test2();
    test3();

    return 0;
}
#endif
g++ TimeUtil.cpp

 



标签:__,OK,linux,----,tm,时间,str,time,return
From: https://blog.51cto.com/u_3078781/8628177

相关文章

  • C++使用OpenSSL实现AES-256-CBC加密解密实例----亲测OK
    //AesUtil.h#ifndef__AES_UTIL_H__#define__AES_UTIL_H__#ifdef__cplusplus//告诉编译器,这部分代码按C语言的格式进行编译,而不是C++的extern"C"{#endifstringUTIL_aes_cbc_encrypt(constunsignedchar*password,unsignedintpassword_byte_len,c......
  • C++使用OpenSSL实现Base64编码、解码实例----亲测OK
    摘自:https://www.dandelioncloud.cn/article/details/1498198300963708930 //Base64Util.h#ifndef__BASE64_UTIL_H__#define__BASE64_UTIL_H__#ifdef__cplusplus//告诉编译器,这部分代码按C语言的格式进行编译,而不是C++的extern"C"{#endifstringUTIL......
  • 【谢华】超脑力高效学习法
    目录记忆法标签表1.字母锁链法2.锁链衍生法3.谐音联想法4.直观记忆法5.位置法扩增单词计划注意事项记忆法【谢华】超脑力高效学习法标签表1.字母锁链法利用字母标签加上锁链法串成一张图片来记忆。例如:熊bear想像一个熊,熊的大腿上叮着一只大蜜蜂(e),蜜蜂被老鹰(e)咬着,老鹰的爪子抓......
  • 翻译:MySQL InnoDB Cluster - Navigating the Cluster
    本文是对这篇文章MySQLInnoDBCluster-NavigatingtheCluster[1]的翻译,翻译如有不当的地方,敬请谅解,请尊重原创和翻译劳动成果,转载的时候请注明出处。谢谢!当我们管理InnoDBCluster时,一件非常重要的事情就是了解集群处于什么样的状态,特别是要了解如何解释集群状态的报告,以及如何......
  • Springboot开发的应用为什么这么占用内存
    Springboot开发的应用为什么这么占用内存Java的原罪Java程序员比c或者是c++程序员相比轻松了很多.不要管理繁杂的内存申请与释放,也不用担心因为忘记释放内存导致很严重的内存泄漏.因为JAVA使用GC垃圾回收的机制实现了内存的自动管理.自凡是自动管理,就需要有单独的内存......
  • Nginx loki监控日志的学习
    Nginxloki监控日志的学习背景学习https://mp.weixin.qq.com/s/Qt1r7vzWvCcJpNDilWHuxQ增加了一些自己的理解第一部分nginx日志的完善在logformat的后面增加一个:log_formatjson_analyticsescape=json'{''"msec":"$msec",'#request......
  • 部分MySQL的SQL信息整理
    模块补丁信息查看selectsuas补丁模块,count(1)as数量fromgsppatchlogwhereTO_DAYS(NOW())-TO_DAYS(deployedtime)<=300groupbysuorderby2descselectpatchcodefromgsppatchlogwhereTO_DAYS(NOW())-TO_DAYS(deployedtime)<=1orderby1......
  • Windows平台的prometheus和Grafana的学习与使用
    Windows平台的prometheus和Grafana的学习与使用背景最近没有了linux机器突然想捯饬一下Windows平台的监控与使用所以总结一一下.第一步下载https://prometheus.io/download/https://grafana.com/grafana/download注意需要下载windows平台的安装介质建议是选择zip包.zip包......
  • 阿里云崩溃了,为什么你没有收到补偿?【补偿领取方式放文末】
    事情经过北京时间11月27日,阿里云部分地域云数据库控制台访问出现异常。据悉,从当日09:16起,阿里云监控发现北京、上海、杭州、深圳、青岛、香港以及美东、美西地域的数据库产品(RDS、PolarDB、Redis等)的控制台和OpenAPI访问出现异常,实例运行不受影响。经过工程师紧急处理,访问异常问......
  • 阿里云崩溃了,为什么你没有收到补偿?【补偿领取方式放文末】
    事情经过北京时间11月27日,阿里云部分地域云数据库控制台访问出现异常。据悉,从当日09:16起,阿里云监控发现北京、上海、杭州、深圳、青岛、香港以及美东、美西地域的数据库产品(RDS、PolarDB、Redis等)的控制台和OpenAPI访问出现异常,实例运行不受影响。经过工程师紧急处理,访问异常问......