cc++ 两个时间大小比较

cc++ 两个时间大小比较,第1张

两个时间大小的比较方法描述如下:

首先解析字符串,获取年月日时分秒各项数值。然后按照先比较年月日,再比较时分秒的办法进行比较。如果大于则返回1,如果小于返回0,如果等于返回2。

  这里面需要利用到两个知识点:

比较年月日,可以先将年月日整合为一个整数,然后比较整数即可比较出年月日的大小

sscanf可以将字符串中的数值提取出来

代码实现如下:

int compare(const char time1,const char time2)
{
    int year1,month1,day1,hour1,min1,sec1;
    int year2,month2,day2,hour2,min2,sec2;
    sscanf(time1,"%d-%d-%d %d:%d:%d",&year1,&month1,&day1,&hour1,&min1,&sec1);
    sscanf(time2,"%d-%d-%d %d:%d:%d",&year2,&month2,&day2,&hour2,&min2,&sec2);
    int tm1 = year110000+month1100+day1;
    int tm2 = year210000+month2100+day2;
    if(tm1!=tm2) return (tm1>tm2)1:0;//如果相等,大返回1,小返回0
    tm1 = hour13600+min160+sec1;
    tm2 = hour23600+min260+sec2;//将时分秒转换为秒数
    if(tm1!=tm2) return (tm1>tm2)1:0;//如果相等,大返回1,小返回0
    return 2;//到这里必然是相等了
}

c语言时间函数
1、获得日历时间函数:
可以通过time()函数来获得日历时间(Calendar Time),其原型为:time_t time(time_t timer);
如果已经声明了参数timer,可以从参数timer返回现在的日历时间,同时也可以通过返回值返回现在的日历时间,即从一个时间点(例如:1970年1月1日0时0分0秒)到现在此时的秒数。如果参数为空(NUL),函数将只通过返回值返回现在的日历时间,比如下面这个例子用来显示当前的日历时间:
2、获得日期和时间函数:
这里说的日期和时间就是平时所说的年、月、日、时、分、秒等信息。从第2节我们已经知道这些信息都保存在一个名为tm的结构体中,那么如何将一个日历时间保存为一个tm结构的对象呢?
其中可以使用的函数是gmtime()和localtime(),这两个函数的原型为:
struct tm gmtime(const time_t timer);
struct tm localtime(const time_t timer);
其中gmtime()函数是将日历时间转化为世界标准时间(即格林尼治时间),并返回一个tm结构体来保存这个时间,而localtime()函数是将日历时间转化为本地时间。比如现在用gmtime()函数获得的世界标准时间是2005年7月30日7点18分20秒,那么用localtime()函数在中国地区获得的本地时间会比世界标准时间晚8个小时,即2005年7月30日15点18分20秒。

惯例,在等号左边尽量不要有对字段的运算,所以一般用法有:
1、判断其是否在某个日期区间:
Where CheckDate Between '2013-01-01' And '2013-01-31'
这个方法也可用于加几天是多少,或减几天是多少:
把起迄日期参数化,原CheckDate要加的,那就变成@BeginDate加,减也同理~
2、判断其是否大于某天:
Where CheckDate >'2013-01-01' 或大于等于:Where CheckDate >='2013-01-01'
小于某天
Where CheckDate <'2013-01-01' 或小于等于:Where CheckDate <='2013-01-01'
3、判断其是否等于某天:
如果Check字段不带时间,只是年月日,那直接等于就可以了;
Where CheckDate ='2013-01-01'
如果CheckDate字段是携带时间的就会有差别;这一点,在上述所有方法中都需要注意
eg:CheckDate 实际存储值可能是: 20130101 08:50:54:000 或 20130101 22:50:54:000
这时直接用上面的等号是抓不到的,因此或改写成:
Where CheckDate >= '2013-01-01' And CheckDate < '2013-01-02'
当然也可以把'2013-01-01',定义为参数@Date DateTime
Where CheckDate >= @Date And CheckDate < @Date+1
不建议在等号左边使用函数或计算对表字段进行计算。
以上是两个日期的判断,另外有些日期处理函数可以了解一下:
DATEDIFF ( datepart , startdate , enddate )
返回指定的 startdate 和 enddate 之间所跨的指定 datepart 边界的计数(带符号的整数)。
eg:
Select DateDiff(DAY,'20130101','20130105')
1号到5号相差4天,输出结果为4
常用的datepart 有:
datepart 缩写
year yy, yyyy 年
month mm, m 月
day dd, d 日
week wk, ww 周
hour hh 时
minute mi, n 分
second ss, s 秒
DATEADD(datepart, number, date)
将表示日期或时间间隔的数值与日期中指定的日期部分相加后,返回一个新的 DT_DBTIMESTAMP 值。number 参数的值必须为整数,而 date 参数的取值必须为有效日期。
eg:
Select DATEADD(DAY,1,'20130101')
1号加1天就是2号;输出结果为 ‘2013-01-02’
Number可以是负数就变成减几天
DATEADD(datepart, number, date)
将表示日期或时间间隔的数值与日期中指定的日期部分相加后,返回一个新的 DT_DBTIMESTAMP 值。number 参数的值必须为整数,而 date 参数的取值必须为有效日期。
eg:
Select DATEPART(DAY,'20130101')
返回datepart描述的部分,输出结果为 1

=SUBSTITUTE(B1,"","-")-SUBSTITUTE(A1,"","-")
比较的话, - 、>、< 这三个符号都可以,问题是要先转换成正确数值格式

思路:都转化成时间的格式,然后比较。
具体的代码:
function comptime() {
var beginTime = "2010-1-9 8:00:00";
var endTime = "2010-1-13 13:41:52";
var beginTimes = beginTimesubstring(0, 10)split('-');
var endTimes = endTimesubstring(0, 10)split('-');
beginTime = beginTimes[1] + '-' + beginTimes[2] + '-' + beginTimes[0] + ' ' + beginTimesubstring(10, 19);
endTime = endTimes[1] + '-' + endTimes[2] + '-' + endTimes[0] + ' ' + endTimesubstring(10, 19);
alert(beginTime + "aaa" + endTime);
alert(Dateparse(endTime));
alert(Dateparse(beginTime));
var a = (Dateparse(endTime) - Dateparse(beginTime)) / 3600 / 1000;
if (a < 0) {
alert("endTime小!");
} else if (a > 0) {
alert("endTime大!");
} else if (a == 0) {
alert("时间相等!");
} else {
return 'exception'
}
}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13386375.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-26
下一篇 2023-07-26

发表评论

登录后才能评论

评论列表(0条)

保存