获取两个字符串日期的差值的方法

日期的格式:“yymmddhhmmss”是一个字符串,计算两个日期之间的差值,显然就是计算两个日期之间相差的秒数,有个简洁的方法是将字符串转化为time_t格式,用time_t表示的时间(日历时间)是从一个时间点(例如:1970年1月1日0时0分0秒)到此时的秒数

我们可以看到它的定义是这样的

#ifndef _TIME_T_DEFINED
typedef long time_t;           /* 时间值 */
#define _TIME_T_DEFINED       /* 避免重复定义 time_t */
#endif

由于长整形数值大小的限制,它所表示的时间不能晚于2038年1月18日19时14分07秒,所以现在我们还能放心的使用二十多年。

转化成整数之后,求取差值即可

我当初没有想到此方法,用了一种比较笨的办法,就是计算:相差天数*1440*60+相差秒数

代码大概是这样的:

//获取两个时间相差分钟数
int GetDifMin(string strTime1, string strTime2)
{
	if (strTime1.length() != 12 || strTime2.length() != 12)
	{
		return -1;
	}
	if (strTime1.compare(strTime2) < 0)
	{
		string linshi = strTime1;
		strTime1 = strTime2;
		strTime2 = linshi;
	}

	int iDefDays = 0;
	if (strcmp(strTime1.substr(0, 8).c_str(), strTime2.substr(0, 8).c_str()) > 0)
	{
		int iDaysCount1 = 0;
		int iDaysCount2 = 0;
		int iYear1, iYear2, iMonth1, iMonth2, iDay1, iDay2;
		iYear1 = iYear2 = iMonth1 = iMonth2 = iDay1 = iDay2 = 0;
		iYear1 = atoi(strTime1.substr(0, 4).c_str());
		iYear2 = atoi(strTime2.substr(0, 4).c_str());
		iMonth1 = atoi(strTime1.substr(4, 2).c_str());
		iMonth2 = atoi(strTime2.substr(4, 2).c_str());
		iDay1 = atoi(strTime1.substr(6, 2).c_str());
		iDay2 = atoi(strTime2.substr(6, 2).c_str());
		int DAY[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
		if ((iYear1 % 4 == 0 || iYear1 % 400 == 0) && (iYear1 % 100 != 0))
		{
			DAY[1] = 29;
		}
		for (int i = 0; i < iMonth1 - 1; i++)
		{
			iDaysCount1 += DAY[i];
		}
		iDaysCount1 += iDay1;

		DAY[1] = 28;
		if ((iYear2 % 4 == 0 || iYear2 % 400 == 0) && (iYear2 % 100 != 0))
		{
			DAY[1] = 29;
		}
		for (int i = 0; i < iMonth2 - 1; i++)
		{
			iDaysCount2 += DAY[i];
		}
		iDaysCount2 += iDay2;

		if (iYear1 > iYear2)
		{
			for (int i = iYear2; i < iYear1; i++)
			{
				iDaysCount1 += 365;
				if ((i % 4 == 0 || i % 400 == 0) && (i % 100 != 0))
				{
					iDaysCount1++;
				}
			}
		}
		iDefDays = iDaysCount1 - iDaysCount2;
	}
	int ret = iDefDays * 1440;
	string hour1 = strTime1.substr(8, 2);
	string hour2 = strTime2.substr(8, 2);
	ret += (atoi(hour1.c_str()) - atoi(hour2.c_str())) * 60;
	string min1 = strTime1.substr(10, 2);
	string min2 = strTime2.substr(10, 2);
	ret += atoi(min1.c_str()) - atoi(min2.c_str());
	return ret;
}

  此函数的日期格式与上面讲到的相似,只是没有秒数,其他的都是相同的。

时间: 2024-12-26 06:15:22

获取两个字符串日期的差值的方法的相关文章

PHP中比较两个时间的大小与日期的差值

在这里我们全用到时间戳 mktime(hour,minute,second,month,day,year,[is_dst])     其参数可以从右向左省略,任何省略的参数都会被设置成本地日期和时间的当前值. 参数 描述 hour 可选.规定小时. minute 可选.规定分钟. second 可选.规定秒. month 可选.规定用数字表示的月. day 可选.规定天. year 可选.规定年.在某些系统上,合法值介于 1901 – 2038 之间.不过在 php教程 5 中已经不存在这个限制

给定两个字符串,获取两个字符串中最大相同的子串

1 package weekpratisce; 2 3 ///给定两个字符串,获取两个字符串中最大相同的子串 4 public class Demo9 { 5 public static void main(String[] args) { 6 String xx = "aaaaaaaaaaddddddd", yy = "45ddddda"; 7 String str = getMaxsubstring(xx, yy); 8 System.out.println(s

输入两个时间戳,计算差值

<?php date_default_timezone_set("Asia/Shanghai"); //date_default_timezone_set("UTC"); //date_default_timezone_set("PRC"); //输入两个时间戳,计算差值,也就是相差的小时数,如返回2:10,则表示输入的两个时间相差2小时10分钟  function hours_min($start_time,$end_time){  if

获取两个字符串中最长相等的字符串

获取两个字符串中最长相等的字符串 例:"likeyou"和"loveyou" 输出"eyou" 前段时间面试遇到的面试题,当时的想法是首先将字符串拆分成字符数组,然后拿两个数组去做比较,可惜由于基础不是很扎实,当时的for循环比较写成了这个样子 for (int i = 0; i < arrStr1.length; i++) { for (int j = 0; j < arrStr2.length; j++) { if (arrStr

获取两个字符串中最大相同子串

2.获取两个字符串中最大相同子串.第一个动作:将短的那个串进行长度一次递减的子串打印. "cvhellobnmtanop" "andefc" 思路: 1,将短的那个子串按照长度递减的方式获取到. 2,将每获取到的子串去长串中判断是否包含,如果包含,已经找到! package tan; class Test { public static String getMaxSubString(String s1,String s2) { String max = "

求二叉树中相差最大的两个节点间的差值绝对值

题目描述: 写一个函数,输入一个二叉树,树中每个节点存放了一个整数值,函数返回这棵二叉树中相差最大的两个节点间的差值绝对值.请注意程序效率. solution: int findMinMax(BTNode *T) { if(!T) return 0; int max = INT_MIN; int min = INT_MAX; stack<BTNode*> s; s.push(T); while (!s.empty()) { BTNode *tmp = s.top(); if(tmp->d

php 日期 - 计算2个日期的差值

1 /** 2 * 日期-计算2个日期的差值 3 * @return int 4 */ 5 public function get_difference($date, $new_date) { 6 $date = strtotime($date); 7 $new_date = strtotime($new_date); 8 return abs(ceil(($date - $new_date)/86400)); 9 }

获取两个字符串的最大相同子串

/** 获取两个字符串的最大相同子串. String s1 = "也许成湖科技是今天最大的赢家"; String s2 = "可能成湖科技未必成为今天最大的赢家吧"; /** 获取两个字符串的最大相同子串. String s1 = "也许成湖科技是今天最大的赢家"; String s2 = "可能成湖科技未必成为今天最大的赢家吧"; 思路: 1,先明确两个字符串的长短,在长串中判断短串是否存在. 2 存在,已找到,说明短串就是

获取两个字符串全部公共的子串算法

应用场景: 获取两个字符串全部公共的子串. 思路: 1. 先获取两个子串的交集 2. 遍历交集子串,从最短子串到最长子串 public static List<String> getAllCommonSubStrings(String str1, String str2) { //TODO null check. String longString = str1; String shortString = str2; if(str1.length() < str2.length()){