1. 计算两天之间相隔几天的Java函数

/**

* 计算两天之间相差几天

* @param startTime

* @param endTime

* @return

*

* 取得两个时间段的时间间隔

* return t2 与t1的间隔天数

* throws ParseException 如果输入的日期格式不是0000-00-00 格式抛出异常

*/

public static int betweenTwoDays(String startTime,String endTime){

String startYearStr = startTime.substring(0, 4);

String endYearStr = endTime.substring(0, 4);

String startMonthStr = startTime.substring(4, 6);

String endMonthStr = endTime.substring(4, 6);

String startDayStr = startTime.substring(6, 8);

String endDayStr = endTime.substring(6, 8);

String t1 = startYearStr+"-"+startMonthStr+"-"+startDayStr;

String t2 = endYearStr+"-"+endMonthStr+"-"+endDayStr;

DateFormat format = new SimpleDateFormat("yyyy-MM-dd");

int betweenDays = 0;

Date d1 = null;

Date d2 = null;

try {

d1 = format.parse(t1);

d2 = format.parse(t2);

Calendar c1 = Calendar.getInstance();

Calendar c2 = Calendar.getInstance();

c1.setTime(d1);

c2.setTime(d2);

int betweenYears = c2.get(Calendar.YEAR)-c1.get(Calendar.YEAR);

betweenDays = c2.get(Calendar.DAY_OF_YEAR)-c1.get(Calendar.DAY_OF_YEAR);

for(int i=0;i

c1.set(Calendar.YEAR,(c1.get(Calendar.YEAR)+1));

betweenDays += c1.getMaximum(Calendar.DAY_OF_YEAR);

}

} catch (ParseException e) {

e.printStackTrace();

}

return betweenDays;

}

2. 判断是否为闰年

/***

* 判断是否为闰年

* @param yearStr

* @return

*/

public static boolean isLoop(String yearStr){

int year = Integer.parseInt(yearStr);

boolean flag = false;

if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)){

flag = true;

}

return flag;

}

public static boolean isLoop(int year){

boolean flag = false;

if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)){

flag = true;

}

return flag;

}

3.判断前多少天是那一天的函数

/****

* 计算出day的before天之前是哪一天

* @param day

* @return

*/

public static String getDayBefore(String day,int beforeDay){

String resultDay = null;

String YearStr = day.substring(0, 4);

String MonthStr = day.substring(4, 6);

String DayStr = day.substring(6, 8);

int yearInt = Integer.parseInt(YearStr);

int monthInt = Integer.parseInt(MonthStr);

int dayInt = Integer.parseInt(DayStr);

int[] month;

if(isLoop(yearInt)){

month = new int[]{0,31,29,31,30,31,30,31,31,30,31,30,31};

}

else{

month = new int[]{0,31,28,31,30,31,30,31,31,30,31,30,31};

}

for(int i=0;i

dayInt--;

if(dayInt<=0){

monthInt--;

if(monthInt<=0){

yearInt--;

monthInt = 12;

dayInt = month[monthInt];

}

else{

dayInt = month[monthInt];

}

}

}

resultDay = ""+yearInt+String.format("%02d",monthInt)+String.format("%02d",dayInt);

return resultDay;

}

一些转载之作:

1.计算某一月份的最大天数

Calendar time=Calendar.getInstance();

time.clear();

time.set(Calendar.YEAR,year);

time.set(Calendar.MONTH,i-1);//注意,Calendar对象默认一月为0

int day=time.getActualMaximum(Calendar.DAY_OF_MONTH);//本月份的天数

注:在使用set方法之前,必须先clear一下,否则很多信息会继承自系统当前时间

2.Calendar和Date的转化

(1) Calendar转化为Date

Calendar cal=Calendar.getInstance();

Date date=cal.getTime();

(2) Date转化为Calendar

Date date=new Date();

Calendar cal=Calendar.getInstance();

cal.setTime(date);

3.格式化输出日期时间

Date date=new Date();

SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

System.out.println(df.format(date));

4.计算一年中的第几星期

(1)计算某一天是一年中的第几星期

Calendar cal=Calendar.getInstance();

cal.set(Calendar.YEAR, 2006);

cal.set(Calendar.MONTH, 8);

cal.set(Calendar.DAY_OF_MONTH, 3);

int weekno=cal.get(Calendar.WEEK_OF_YEAR);

(2)计算一年中的第几星期是几号

SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");

Calendar cal=Calendar.getInstance();

cal.set(Calendar.YEAR, 2006);

cal.set(Calendar.WEEK_OF_YEAR, 1);

cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);

System.out.println(df.format(cal.getTime()));

输出:

2006-01-02

5.add()和roll()的用法

(1)add()方法

SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");

Calendar cal=Calendar.getInstance();

cal.set(Calendar.YEAR, 2006);

cal.set(Calendar.MONTH, 8);

cal.set(Calendar.DAY_OF_MONTH, 3);

cal.add(Calendar.DATE, -4);

Date date=cal.getTime();

System.out.println(df.format(date));

cal.add(Calendar.DATE, 4);

date=cal.getTime();

System.out.println(df.format(date));

输出:

2006-08-30

2006-09-03

(2)roll方法

cal.set(Calendar.YEAR, 2006);

cal.set(Calendar.MONTH, 8);

cal.set(Calendar.DAY_OF_MONTH, 3);

cal.roll(Calendar.DATE, -4);

date=cal.getTime();

System.out.println(df.format(date));

cal.roll(Calendar.DATE, 4);

date=cal.getTime();

System.out.println(df.format(date));

输出:

2006-09-29

2006-09-03

可见,roll()方法在本月内循环,一般使用add()方法;

6.计算两个任意时间中间的间隔天数

(1)传进Calendar对象

/**计算两个时间之间相隔天数

     *@paramstartday  开始时间

     *@paramendday 结束时间

     *@return*/

public

int

getIntervalDays(Calendar startday,Calendar endday)

{

//确保startday在endday之前if(startday.after(endday)){

            Calendar cal=startday;

            startday=endday;

            endday=cal;

        }//分别得到两个时间的毫秒数longsl=startday.getTimeInMillis();

longel=endday.getTimeInMillis();

longei=el-sl;

//根据毫秒数计算间隔天数return(int)(ei/(1000*60*60*24));

    } (2)传进Date对象

/**计算两个时间之间相隔天数

     *@paramstartday  开始时间

     *@paramendday 结束时间

     *@return*/

public

int

getIntervalDays(Date startday,Date endday)

{

//确保startday在endday之前if(startday.after(endday)){

            Date cal=startday;

            startday=endday;

            endday=cal;

        }//分别得到两个时间的毫秒数longsl=startday.getTime();

longel=endday.getTime();

longei=el-sl;

//根据毫秒数计算间隔天数return(int)(ei/(1000*60*60*24));

    } 同理,可以用相同的方法计算出任意两个时间相隔的小时数,分钟数,秒钟数等

注:以上方法是完全按时间计算,有时并不能令人满意,如:

startday="2006-10-11 20:00:00"

endday="2006-10-12 8:00:00"

计算结果为0,但是我们也许相让计算结果变为1,此时可以用如下方法实现:

在传参之前,先设定endday的时间,如:

endday.set(Calendar.HOUR_OF_DAY, 23);

endday.set(Calendar.MINUTE, 59);

endday.set(Calendar.SECOND, 59);

endday.set(Calendar.MILLISECOND, 59);

这样再传进去startday,endday,则结果就如我们所愿了。不过,如果嫌以上方法麻烦,可以参考以下方法:

(3)改进精确计算相隔天数的方法

public

int

getDaysBetween (Calendar d1, Calendar d2)

{

if(d1.after(d2)){//swap dates so that d1 is start and d2 is endjava.util.Calendar swap=d1;

            d1=d2;

            d2=swap;

        }intdays=d2.get(Calendar.DAY_OF_YEAR)-d1.get(Calendar.DAY_OF_YEAR);

inty2=d2.get(Calendar.YEAR);

if(d1.get(Calendar.YEAR)!=y2){

            d1=(Calendar) d1.clone();

do{

                days+=d1.getActualMaximum(Calendar.DAY_OF_YEAR);//得到当年的实际天数d1.add(Calendar.YEAR,1);

            }while(d1.get(Calendar.YEAR)!=y2);

        }returndays;

    }

java封装需要多久_Java对时间操作的一些封装函数相关推荐

  1. java中转换日期_java中时间日期格式讲解和转换方法

    额,其实做项目一个无可避免的工具包就是时间日期格式的转换.因为时间久了所以自己也存了好多关于转换的方法之类的.但是有时候就会不满足需求,手写一时半会儿还写不出来(我不知道是不是我太菜了,知道某类大概有 ...

  2. java到期日期_java 常用时间操作类,计算到期提醒,N年后,N月后的日期

    packagecom.zjjerp.tool;importjava.text.ParseException;importjava.text.ParsePosition;importjava.text. ...

  3. java poi exce 移动_JAVA使用POI操作excel

    这里提一下,java操作excel的组件除了apache的poi,还有jexcelapi(jxl),其中poi组件的获取地址为poi.apache.org. poi组件中常用的类有HSSFworkbo ...

  4. java.time.format例子_java格式化时间示例

    实现日期的格式化,需要用到类: java.text.DateFormat DateFormat没有可以直接使用的构造函数,一般使用DateFormate的子类---java.text.SimpleDa ...

  5. JAVA格式化同一天时间间隔_java中时间格式化怎么去时间间隔值

    java中时间格式化怎么去时间间隔值 关注:61  答案:2  mip版 解决时间 2021-01-12 11:52 提问者眼泪↓流到叻心里 2021-01-11 20:30 比如2015-02-03 ...

  6. java 处理时间的类_java 日期时间处理类

    下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. import java.util.Calendar; import java.sql.Da ...

  7. java ppt控件_Java版PPT操作控件Spire.Presentation v3.3.5新版来袭!支持转换GroupShape到图片...

    Spire.Presentation for Java是专业的 PowerPoint API,它允许开发人员在 Java 应用程序中创建.读取.写入.转换和保存 PowerPoint 文档.作为一款独 ...

  8. java获取月末日期_Java获取时间年、月、日的方法

    package com.date.demo; import java.text.ParseException; import java.text.SimpleDateFormat; import ja ...

  9. java 纳秒 格式化_Java日期时间API系列35-----Jdk8中java.time包中的新的日期时间API类应用,微秒和纳秒等更精确的时间格式化和解析。...

    通过Java日期时间API系列1-----Jdk7及以前的日期时间类中得知,Java8以前除了java.sql.Timestamp扩充纳秒,其他类最大只精确到毫秒:Java8 time包所有相关类都支 ...

最新文章

  1. 3种时间序列混合建模方法的效果对比和代码实现
  2. C语言关键字--volatile(不稳定的,反复无常的)
  3. python绘制一个圆_Python在网格上绘制一个填充的“圆”
  4. 近期“速卖通母婴行业需求暴增”,带你了解母婴行业选品趋势
  5. [MATLAB学习笔记]textread读取文本文件中的数据;写入多个输出
  6. Boost::context模块fiber的jump_mov测试程序
  7. 裘宗燕-数据结构与算法python描述-ppt及源代码
  8. 查看某个方法在哪里被调用_一篇文章带你查看并处理Pandas数据
  9. python线程监控_Python多线程的事件监控
  10. css文本外观属性大全(内附实例与图解)
  11. 华为HCNA之PPP认证实验
  12. 16中国App年度排行榜及17年趋势预测
  13. python之window下安装python2版的pyv8库 (window install python2 pyv8)
  14. 代码比较工具DiffMerge的下载和使用(转)
  15. 9011,9012,9013,9014,8050,8550 三极管的区别
  16. java jar apktool,gradle 构建apktool.jar
  17. 2018至2021年新春挡电影票房分析
  18. 有关DLNA的一个讲座
  19. 超详细如何配置NAT
  20. eclips的快捷键

热门文章

  1. 多线程介绍与threading模块应用以及使用Thread类创建多线程
  2. C#运算符重载(操作符重载)
  3. Spark记录-Scala记录(基础程序例子)
  4. css改变滚动条样式
  5. iOS 下ARC的内存管理机制
  6. C++的三大特性之一继承
  7. NET平台4.0 发布网站流程及出错总结
  8. WPF——Expander控件(转)
  9. HEU 5039 Move Woods
  10. 学习Site Columns