本文采用Calendar 实现 ,当然也可以用java8提供的愉快且方便的时间处理- LocalDate

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.regex.Matcher;
import java.util.regex.Pattern; public class DateDaySub { private static Calendar calS = Calendar.getInstance();
private static Pattern p = Pattern.compile("\\d{4}-\\d{2}-\\d{2}");//定义整则表达式 /**
* 计算剩余时间
*
* @param startDateStr yyyy-MM-dd
* @param endDateStr yyyy-MM-dd
* @return ?年?个月?天
*/
public static String remainDateToString(String startDateStr, String endDateStr) {
java.util.Date startDate = null;
java.util.Date endDate = null;
try {
startDate = new SimpleDateFormat("yyyy-MM-dd").parse(startDateStr);
} catch (ParseException e) {
e.printStackTrace();
return "";
}
try {
endDate = new SimpleDateFormat("yyyy-MM-dd").parse(endDateStr);
} catch (ParseException e) {
e.printStackTrace();
return "";
}
calS.setTime(startDate);
int startY = calS.get(Calendar.YEAR);
int startM = calS.get(Calendar.MONTH);
int startD = calS.get(Calendar.DATE);
int startDayOfMonth = calS.getActualMaximum(Calendar.DAY_OF_MONTH); calS.setTime(endDate);
int endY = calS.get(Calendar.YEAR);
int endM = calS.get(Calendar.MONTH);
//处理2011-01-10到2011-01-10,认为服务为一天
int endD = calS.get(Calendar.DATE) + 1;
int endDayOfMonth = calS.getActualMaximum(Calendar.DAY_OF_MONTH); StringBuilder sBuilder = new StringBuilder();
if (endDate.compareTo(startDate) < 0) {
return sBuilder.append("过期").toString();
}
int lday = endD - startD;
if (lday < 0) {
endM = endM - 1;
lday = startDayOfMonth + lday;
}
//处理天数问题,如:2011-01-01 到 2013-12-31 2年11个月31天 实际上就是3年
if (lday == endDayOfMonth) {
endM = endM + 1;
lday = 0;
}
int mos = (endY - startY) * 12 + (endM - startM);
int lyear = mos / 12;
int lmonth = mos % 12;
if (lyear > 0) {
sBuilder.append(lyear + "年");
}
if (lmonth > 0) {
sBuilder.append(lmonth + "个月");
}
// if(lyear==0)//满足项目需求 满一年不显示天数
if (lday > 0) {
sBuilder.append(lday + "天");
}
return sBuilder.toString();
} /*
* 转换 dataAndTime 2013-12-31 23:59:59 到
* date 2013-12-31
*/
public static String getDate(String dateAndTime) {
if (dateAndTime != null && !"".equals(dateAndTime.trim())) {
Matcher m = p.matcher(dateAndTime);
if (m.find()) {
return dateAndTime.subSequence(m.start(), m.end()).toString();
}
}
return "data error";
}
}

  

两个时间点计算相隔几年,几个月,几天-java的更多相关文章

  1. python的N个小功能(文本字段对应数值,经纬度计算距离,两个时间点计算时间间隔)

    案例1 >>> import pandas as pd >>> df=pd.DataFrame({'A':[1,2,3],'B':[1,2,3],'C':[1,2, ...

  2. Java 8 表示两个时间点距离

    Java JDK8 的 java.time API 提供全面的 date 和 time 的模型. 下面是一个使用案例:求两个时间点的距离. package com.tony.test; import ...

  3. php计算时间差/两个时间日期相隔的天数,时,分,秒.

    function timediff( $begin_time, $end_time ) { if ( $begin_time < $end_time ) { $starttime = $begi ...

  4. javascript中计算两个时间日期间隔的天数

    <script>              /*                  计算两个日期的时间间隔天数              */              //时间字符串的格 ...

  5. C#计算两个时间年份月份差

    C#计算两个时间年份月份差 https://blog.csdn.net/u011127019/article/details/79142612

  6. 计算两个NSDate之间,相隔多少秒数

    计算两个NSDate之间,相隔多少秒数 //两个时间间隔秒数 - (NSInteger)intervalSecondsWithSmallDate:(NSDate*)smallDate bigDate: ...

  7. java计算两个日期之间的相隔天数

    [原创] 之前在很多竞赛的题目中有这样饿一类题,计算给定两个日期之间的相隔天数,或者很多类似的题目,都是需要转化到这个问题上时,之前用c++写的时候思想是这样的,一个结构体,包括年月日,还有一个计算下 ...

  8. js计算两个时间之间的间隔

    计算时间间隔的方法有很多,这里只是一种方式,可以方法里直接传入两个时间,也可以传入两个字符串格式的时间,在方法里解析一下就ok,这个例子里不传入参数,直接在方法里随便写一个时间来演示一下 fun() ...

  9. java计算两个时间相差(天、小时、分钟、秒)

    public static Long dateDiff(String startTime, String endTime, String format, String str) { // 按照传入的格 ...

随机推荐

  1. Shell 变量替换及测试

    声明:$ 后面跟linux可执行命令 一.变量替换                   语法                      说明 ${变量名#匹配规则} 从变量的开头进行规则匹配,将符合最 ...

  2. 关于Redis缓存数据库

    将数据存入缓存1.(会先从数据库查数据,数据库没有会从缓存中拿,没有则会从数据库拿.且加入缓存)@Cacheable(name="命名空间",key="#xxx^&quo ...

  3. ubuntu16.04 配置双网卡机器

    本文介绍一台具有双有线网卡的机器在Linux下如何配置双网卡 系统平台:Ubuntu16.04 1:查看机器网卡信息,是否双网卡都能正确被机器pci识别 可以通过以下命令查看设备网卡,若果看到两条网卡 ...

  4. char * p = "abc"与const char *p = "abc"

    char * p = "abc"与const char *p = "abc"的区别是什么呢? 第一个语句会产生问题: warning: deprecated c ...

  5. python 进程池的使用和坑

    from multiprocessing import Pool,Process import time,os def Foo(a):#创建函数 time.sleep(2) print('in the ...

  6. codeforces 804A Find Amir 思维/水题

    A few years ago Sajjad left his school and register to another one due to security reasons. Now he w ...

  7. socket资源

    http://www.360doc.com/content/13/1231/16/14919052_341525862.shtml Linux下基于socket多线程并发通信的实现 https://w ...

  8. 如何在idea中引入一个新maven项目

    如何在idea中引入一个新的maven项目,请参见如下操作:      

  9. NTP搭建

    NTP(Network Time Protocol,网络时间协议),用于同步它所有客户端时钟的服务.NTP服务器将本地系统的时钟与一个公共的NTP服务器同步然后作为时间主机提供服务,使本地网络的所有客 ...

  10. CentOS 7下给nginx安装SSL证书

    0. DNS要能解析你的网址(域名解析和主机解析,例如example.com和www.example.com都要能解析.注意泛解析记录*.example.com可以存在但在本文中暂时无法用于https ...