前两天,媳妇单位让整理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. Fluent Nhibernate and Stored Procedures

    sql:存储过程 DROP TABLE Department GO CREATE TABLE Department ( Id INT IDENTITY(1,1) PRIMARY KEY, DepNam ...

  2. [PE结构分析] 11.资源表结构

    资源表是一个树形结构,可以设置成2的31次方的层数,Windows 使用了3级: 类型->名称->语言 其中涉及到四个结构: Data Description Resource Direc ...

  3. $(document).ready()即$()方法和window.onload方法的比较

    以浏览器装载文档为例,我们都知道在页面完毕后,浏览器会通过JavaScript为DOM元素添加事件.在常规的JavaScript代码中,通常使用window.onload方法,而在jQuery中,使用 ...

  4. Css 学习——left与offsetLeft的区别

    1. 首先一个标签元素的left属性是一个string类型,而offsetLeft是一个numberle类型. 求证: <script> window.onload = function( ...

  5. android ArrayAdapter BaseAdapter SimpleAdapter使用讲解

    不是我针对谁,我只想针对新手玩家. 不清楚Adapter作用的可以看一下http://www.cnblogs.com/zhichaobouke/p/5798672.html (括号里的内容都是我主观添 ...

  6. ASP.NET MVC 微信公共平台开发之获取用户消息并处理

    ASP.NET MVC 微信公共平台开发 获取用户消息并处理 获取用户消息 用户发送的消息是在微信服务器发送的一个HTTP POST请求中包含的,获取用户发送的消息要从POST请求的数据流中获取 微信 ...

  7. javascript中apply()和call()方法的区别

    一.方法的定义 call方法: 语法:call(thisObj,Object)定义:调用一个对象的一个方法,以另一个对象替换当前对象.说明:call 方法可以用来代替另一个对象调用一个方法.call ...

  8. Disconnected: No supported authentication methods available (server sent: publickey)

    安装Git客户端后,进行PULL时报如下错误 disconnected no supported authentication methods available(server sent: publi ...

  9. Arcengine实现创建网络数据集札记(三)

    后记 下面给出项目中用到的自定义的封装类. AE许可初始化封装类: public class AELicenseChecker { private static volatile AELicenseC ...

  10. Xcode证书路径和缓存清理路径

    1.Xcode证书路径: ~/Library/MobileDevice/Provisioning Profiles 2.Jenkines共享证书路径: /用户/共享/Jenkins/Library/M ...