java如何计算给出的两个日期相隔多少天?
java如何计算两个日期相隔多少天?
如:给定年份计算:2005-5-10到2011-1-1 ?
给定月分计算 :1-1 到12 -1
给定日子计算: 1 到 31
如何实现?
[解决办法]
- Java code
public int betweenDays(Calendar beginDate, Calendar endDate) { if (beginDate.get(Calendar.YEAR) == endDate.get(Calendar.YEAR)) { return endDate.get(Calendar.DAY_OF_YEAR) - beginDate.get(Calendar.DAY_OF_YEAR); } else { if (beginDate.getTimeInMillis() < endDate.getTimeInMillis()) { int days = beginDate.getActualMaximum(Calendar.DAY_OF_YEAR) - beginDate.get(Calendar.DAY_OF_YEAR) + endDate.get(Calendar.DAY_OF_YEAR); for (int i = beginDate.get(Calendar.YEAR) + 1; i < endDate .get(Calendar.YEAR); i++) { Calendar c = Calendar.getInstance(); c.set(Calendar.YEAR, i); days += c.getActualMaximum(Calendar.DAY_OF_YEAR); } return days; } else { int days = endDate.getActualMaximum(Calendar.DAY_OF_YEAR) - endDate.get(Calendar.DAY_OF_YEAR) + beginDate.get(Calendar.DAY_OF_YEAR); for (int i = endDate.get(Calendar.YEAR) + 1; i < beginDate .get(Calendar.YEAR); i++) { Calendar c = Calendar.getInstance(); c.set(Calendar.YEAR, i); days += c.getActualMaximum(Calendar.DAY_OF_YEAR); } return days; } } }
[解决办法]
有年月日的好办。
只有月日的,不知怎么考虑2/29 ,或者 是否支持 12-1 到 1-1
[解决办法]
- Java code
package com.cme.LanDian;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Scanner;/* * 输入某年某月某日,判断这一天是这一年的第几天? */public class GetDateDays { public static void main(String[] args) { System.out.println("请输入一个日期:"); String dateString = nnew Scanner(System.in).nextLine(); String yearBegin = dateString.substring(0, 4) + "-01-01"; // 定义日期格式: SimpleDateFormat sdf = new SimpleDateFormat("yyyymmdd"); try { Date date = sdf.parse(dateString);// 通过日期格式的parse()方法将字符串转换成日期 Date dateBegin = sdf.parse(yearBegin); long l = date.getTime() - dateBegin.getTime(); l = l / 1000 / 60 / 60 / 24; System.out.println(l); } catch (ParseException e) { e.printStackTrace(); } }}
[解决办法]
date4j
[解决办法]
把日期转化成毫秒,相减得到毫秒数,然后再转化为天
[解决办法]
[解决办法]
[解决办法]
使用 Joda-time 库。
------解决方案--------------------
使用 jsr-310-ri-0.6.3.jar + jsr-310-ri-TZDB-all-0.6.3.jar
- Java code
DateTimeFormatter formatter = DateTimeFormatters.pattern("yyyy-M-d");int days = Period.daysBetween(LocalDate.parse("2005-5-10",formatter),LocalDate.parse("2011-1-1",formatter)).getDays(); // 2062formatter = DateTimeFormatters.pattern("M-d");Year year = Year.now();days = Period.daysBetween(year.atMonthDay(MonthDay.parse("1-1",formatter)),year.atMonthDay(MonthDay.parse("12-1",formatter))).getDays();
[解决办法]
可以尝试。。。。 用JDK里面的 时间提供的类。
[解决办法]
斗胆提出,如果不是日期而是时间呢,转化为毫秒的时间算法还行吗!!
[解决办法]
Calendar c = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
c.set(2005, 5, 10);
c2.set(2011, 1, 1);
System.out.println((c2.getTimeInMillis()-c.getTimeInMillis())/(1000*3600*24));
[解决办法]
直接上代码
- Java code
public long differDays(String date){ long differDays = 0; long DAY = 24L * 60L * 60L * 1000L; SimpleDateFormat df = new SimpleDateFormat( "yyyy-MM-dd" ); Date todayDate = new java.sql.Date(new Date().getTime()); Date paraDate = null; try { paraDate = df.parse( date ); } catch (ParseException e) { e.printStackTrace(); } differDays = ( todayDate.getTime() - paraDate.getTime() ) / DAY ; return differDays;}
[解决办法]
Calendar c = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
c.set(2011, 1, 10);
c2.set(2011, 1, 12);
System.out.println((c2.getTimeInMillis()-c.getTimeInMillis())/(1000*3600*24));
测试过,success!!
[解决办法]
这个以前也考滤过 在图书馆的借还时间 就用毫秒算
[解决办法]
就是三楼的那个比较简单 上次我要用也是用的这种方法
[解决办法]
- Java code
import java.util.concurrent.TimeUnit;public long daysBetween(Calendar from,Calendar to){ return TimeUnit.MILLISECONDS.toDays(to.getTimeInMillis() - from.getTimeInMillis());}