前两天,媳妇单位让整理excel的某一个单元格内两个日期范围的相差月数,本人对excel操作不是很熟练,便写了个小程序计算了一下,原始需求如下:

计算投资期限的范围,并得到期限范围的相差月数

思路1:得到单元格内的两个日期范围,分别截取年月日,并比较年、月、日

    public int getMonth(int row) {

        int result = 0;
int coll = 14; String st = CommonF.getExcelBy07(path, index, row, coll);
//System.out.println(st);
String s[] = st.split("-");
String s1 = s[0];
String s2 = s[1]; //System.out.println(s1);
//System.out.println(s2); String date1[] = s1.split("\\.");
String date2[] = s2.split("\\."); int year1 = Integer.parseInt(date1[0]);
int month1 = Integer.parseInt(date1[1]);
int day1 = Integer.parseInt(date1[2]); int year2 = Integer.parseInt(date2[0]);
int month2 = Integer.parseInt(date2[1]);
int day2 = Integer.parseInt(date2[2]); if(year1==year2) {
if(month1==month2) {
if(day1==day2) {
result = 0;
}
}else if(month1<month2) {
if(day1==1) {
result = month2 - month1 + 1;
}else {
result = month2 - month1;
}
}else if(month1>month2) {
result = month1 - month2;
}
}else if(year1<year2) {
if(month1==month2) {
if(day1==1) {
result = (year2 - year1)*12 + 1;
}else {
result = (year2 - year1)*12;
}
}else if(month1<month2) {
if(day1==1) {
result = (year2 - year1)*12 + (month2 - month1)+1;
}else {
result = (year2 - year1)*12 + (month2 - month1);
}
}else if(month1>month2) {
if(day1==1) {
result = (year2 - year1)*12 - (month1 - month2)+1;
}else {
result = (year2 - year1)*12 - (month1 - month2);
}
}
}else if(year1>year2){
result = -2;//-2代表两个年数输入有误
}else {
result = -1;//-1代表日期输入有误
}
System.out.println("result= "+result);
return result; }

思路2:将日期范围转换为calendar,得到年月日并做比较

     int result = 0;
int coll = 14; String st = CommonF.getExcel(path, index, 4, coll);
//System.out.println(st);
String s[] = st.split("-");
String s1 = s[0];
String s2 = s[1]; //System.out.println(s1);
//System.out.println(s2); String date1[] = s1.split("\\.");
String date2[] = s2.split("\\."); DateFormat df = new SimpleDateFormat("yyyy.MM.dd");
try {
Date d1 = df.parse(s[0]);
Date d2 = df.parse(s[1]); Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
c1.setTime(d1);
c2.setTime(d2);
System.out.println(c1.get(Calendar.YEAR));

java截取日期范围并计算相差月数的更多相关文章

  1. Oracle 计算两个日期间隔的天数、月数和年数

    在Oracle中计算两个日期间隔的天数.月数和年数: 一.天数: 在Oracle中,两个日期直接相减,便可以得到天数: select to_date('08/06/2015','mm/dd/yyyy' ...

  2. 在Oracle中计算两个日期间隔的天数、月数和年数

    一.天数: 在Oracle中,两个日期直接相减,便可以得到天数: select to_date('08/06/2015','mm/dd/yyyy')-to_date('07/01/2015','mm/ ...

  3. Java 计算两个日期相差月数、天数

    package com.myjava; import java.text.ParseException; import java.text.SimpleDateFormat; import java. ...

  4. Java 计算两个日期相差月数

    package com.myjava; import java.text.ParseException;import java.text.SimpleDateFormat;import java.ut ...

  5. oracle中计算两个日期的相差天数、月数、年数、小时数、分钟数、秒数等

    oracle如何计算两个日期的相差天数.月数.年数.小时数.分钟数.秒数 1.相差天数(两个日期相减) --Oracle中两个日期相差天数-- select TO_NUMBER(TO_DATE('20 ...

  6. sql存储过程中,如何根据指定日期、月数、天数推算预产日期

    我这边有一个业务,根据某个指定日期,推算某个患者的预产日期 原理:比如孕产的预产日期的算法(预产日期 = 末次月经日期+ 10月+8天) 那么我们怎么通过存储过程来实现呢? 首先分析条件 需要一个指定 ...

  7. 计算两个日期之间相差的年数月数天数(JS实现)

    前言 如何计算年龄?我的第一直觉做法:(当前时间戳 - 出生时的时间戳)/ (365*86400)  所得结果向下取整.后来发现这种做法获得的结果不准确,不是多了一岁就是少了一岁,不能简单粗暴的这么处 ...

  8. MySQL计算两个日期相差的天数、月数、年数

    MySQL自带的日期函数TIMESTAMPDIFF计算两个日期相差的秒数.分钟数.小时数.天数.周数.季度数.月数.年数,当前日期增加或者减少一天.一周等等. SELECT TIMESTAMPDIFF ...

  9. JAVA中日期转换和日期计算的方法

    日期的格式有很多形式,在使用过程中经常需要转换,下面是各种类型转换的使用例子以及日期计算方法的例子. 一.不同格式日期相互转换方法 public class TestDateConvertUtil { ...

随机推荐

  1. socket调用流程的函数及数据结构

    如有错误,欢迎指正. 如果需要,可以提供visio原文件. 参考: 1. <追踪Linux TCPIP代码运行--基于2.6内核> 2. Linux Kernel 2.6.26

  2. KM算法

    链接: http://blog.csdn.net/lvshubao1314/article/details/41702291 

  3. (转)x11vnc配置--ubuntu14.04

    原文网址:http://www.cnblogs.com/elmaple/p/4354814.html x11vnc是连接到真实的X会话,相比vnc4server和tightvncserver自己创建不 ...

  4. 成熟的RosettaNet解决方案软件介绍

    RosettaNet是一套B2B标准,以标准来优化供应链管理流程,它可以缩短整个供应链各个供货周期.RosettaNet 标准为电子商务标准化提供一个健壮的.非专有的解决方案,它是免费的,通过 Ros ...

  5. windows下使用makecert命令生成自签名证书

    1.makecert命令路径 C:\Program Files (x86)\Windows Kits\8.1\bin\x64 2.生成一个自签名证书 makecert -r -pe -n " ...

  6. WPF超级链接

    一.添加样式 <Style x:Key="LinkLabelStyle"> <Setter Property="Control.Padding" ...

  7. DigitalOcean上SSH Key的创建(附DigitalOcean邀请)

    DigitalOcean是一家云主机商家,最低配置512M内存,20G的SSD,每月只有5刀.半个月前刚刚在这上面买了一个VPS,创建Droplet的时候看见创建SSH Key的时候就有点懵,不知道这 ...

  8. HTML5中的SVG

    * SVG * 基本内容 * SVG并不属于HTML5专有内容 * HTML5提供有关SVG原生的内容 * 在HTML5出现之前,就有SVG内容 * SVG,简单来说就是矢量图 * SVG文件的扩展名 ...

  9. 浅谈React受控与非受控组件

    背景 React内部分别使用了props, state来区分组件的属性和状态.props用来定义组件外部传进来的属性, 属于那种经过外部定义之后, 组件内部就无法改变.而state维持组件内部的状态更 ...

  10. Android破解之Lic文件加密程序(首例)

    我不会写Android,这是我第一个破解Android的例子,耗时接近一天,希望大神不要见笑! 本程序为商业软件,不便发布APK程序. 不要给我发消息,我不得回,有问题,直接回帖就可以了. 准备工作 ...