/**
創(chuàng)新互聯(lián)公司主要從事成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)岐山,十年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18980820575
?*?在一個(gè)時(shí)間段計(jì)算出多少天
?*?@param?beginDate?開始時(shí)間
?*?@param?endDate?結(jié)束時(shí)間
?*?@param?format?格式?如果??yyyy-MM-dd;yyyy
?*?@return?天數(shù)
?*/
public?static?int?getDay(String?beginDate,?String?endDate,?String?format)?{
try?{
//?日期操作類,設(shè)置制定的格式
SimpleDateFormat?sim?=?new?SimpleDateFormat(format);
Date?d1?=?sim.parse(beginDate);?//?傳入開始時(shí)間
Date?d2?=?sim.parse(endDate);???//?傳入結(jié)束時(shí)間
//計(jì)算開始時(shí)間和結(jié)束時(shí)間的時(shí)間差
int?num?=?(int)?((d2.getTime()?-?d1.getTime())?/?(3600L?*?1000?*?24));
if(!format.equals("yyyy"))?{
num?=?num?+?1;
}
return?num;
}?catch?(Exception?e)?{
e.printStackTrace();
return?0;
}
}
public?static?void?main(String[]?args)?{
System.out.println(getDay("2018",?"2020",?"yyyy"));
System.out.println(getDay("2018-01-01",?"2018-12-31",?"yyyy-MM-dd"));
System.out.println(getDay("2019-02-07",?"2019-02-11",?"yyyy-MM-dd"));
}
年的月的都有,有什么疑問可以問我。
好了,你試一下
import java.util.*;
class Test
{
public static void main(String[] args)
{
try
{
Scanner in=new Scanner(System.in);
System.out.print("請(qǐng)輸入年份:");
int year=in.nextInt();
System.out.print("請(qǐng)輸入月份:");
int month=in.nextInt();
if(year0 || month0)
System.out.println("你輸入的年份或月份為負(fù),請(qǐng)輸入正整數(shù)");
int day=28;
GregorianCalendar gc=new GregorianCalendar(year,month-1,day);
System.out.println(gc.get(Calendar.MONTH)+" "+gc.get(Calendar.DAY_OF_MONTH));
while((month-1)==gc.get(Calendar.MONTH))
{
gc.add(Calendar.DAY_OF_MONTH,1);
day++;
}
System.out.println("該月的總天數(shù)為:"+(--day));
}
catch(Exception ex)
{
System.out.println("您輸入了非法字符,程序退出,請(qǐng)輸入正整數(shù)");
}
}
}
請(qǐng)看下面代碼:
public staic void main(String[] args){
int zhouNum=46/7;
int yuNum=46%7;
System.out.println("周數(shù):"+zhouNum+"余下的天數(shù):"+yuNum);
}
在Java開發(fā)物流或是其他功能的時(shí)候會(huì)用到兩個(gè)日期相差多天的數(shù)據(jù),所以整理了一下備用。
調(diào)用方式:
代碼如下 復(fù)制代碼
long date1 = getDateTime("20121201");//可改成自己的日期類型,但以“20121212”這種格式
long date2 = getDateTime("20121212");
int day = dateInterval(date1, date2);
System.out.println(day);
具體實(shí)現(xiàn)方法調(diào)用:
代碼如下 復(fù)制代碼
/**
* 計(jì)算出兩個(gè)日期之間相差的天數(shù)
* 建議date1 大于 date2 這樣計(jì)算的值為正數(shù)
* @param date1 日期1
* @param date2 日期2
* @return date1 - date2
*/
public static int dateInterval(long date1, long date2) {
if(date2 date1){
date2 = date2 + date1;
date1 = date2 - date1;
date2 = date2 - date1;
}
// Canlendar 該類是一個(gè)抽象類
// 提供了豐富的日歷字段
// 本程序中使用到了
// Calendar.YEAR 日期中的年份
// Calendar.DAY_OF_YEAR 當(dāng)前年中的天數(shù)
// getActualMaximum(Calendar.DAY_OF_YEAR) 返回今年是 365 天還是366天
Calendar calendar1 = Calendar.getInstance(); // 獲得一個(gè)日歷
calendar1.setTimeInMillis(date1); // 用給定的 long 值設(shè)置此 Calendar 的當(dāng)前時(shí)間值。
Calendar calendar2 = Calendar.getInstance();
calendar2.setTimeInMillis(date2);
// 先判斷是否同年
int y1 = calendar1.get(Calendar.YEAR);
int y2 = calendar2.get(Calendar.YEAR);
int d1 = calendar1.get(Calendar.DAY_OF_YEAR);
int d2 = calendar2.get(Calendar.DAY_OF_YEAR);
int maxDays = 0;
int day = 0;
if(y1 - y2 0){
day = numerical(maxDays, d1, d2, y1, y2, calendar2);
}else{
day = d1 - d2;
}
return day;
}
/**
* 日期間隔計(jì)算
* 計(jì)算公式(示例):
* 20121201- 20121212
* 取出20121201這一年過了多少天 d1 = 天數(shù) 取出20121212這一年過了多少天 d2 = 天數(shù)
* 如果2012年這一年有366天就要讓間隔的天數(shù)+1,因?yàn)?月份有29日。
* @param maxDays 用于記錄一年中有365天還是366天
* @param d1 表示在這年中過了多少天
* @param d2 表示在這年中過了多少天
* @param y1 當(dāng)前為2012年
* @param y2 當(dāng)前為2012年
* @param calendar 根據(jù)日歷對(duì)象來獲取一年中有多少天
* @return 計(jì)算后日期間隔的天數(shù)
*/
public static int numerical(int maxDays, int d1, int d2, int y1, int y2, Calendar calendar){
int day = d1 - d2;
int betweenYears = y1 - y2;
ListInteger d366 = new ArrayListInteger();
if(calendar.getActualMaximum(Calendar.DAY_OF_YEAR) == 366){
System.out.println(calendar.getActualMaximum(Calendar.DAY_OF_YEAR));
day += 1;
}
for (int i = 0; i betweenYears; i++) {
// 當(dāng)年 + 1 設(shè)置下一年中有多少天
calendar.set(Calendar.YEAR, (calendar.get(Calendar.YEAR)) + 1);
maxDays = calendar.getActualMaximum(Calendar.DAY_OF_YEAR);
// 第一個(gè) 366 天不用 + 1 將所有366記錄,先不進(jìn)行加入然后再少加一個(gè)
if(maxDays != 366){
day += maxDays;
}else{
d366.add(maxDays);
}
// 如果最后一個(gè) maxDays 等于366 day - 1
if(i == betweenYears-1 betweenYears 1 maxDays == 366){
day -= 1;
}
}
for(int i = 0; i d366.size(); i++){
// 一個(gè)或一個(gè)以上的366天
if(d366.size() = 1){
day += d366.get(i);
}
}
return day;
}
/**
* 將日期字符串裝換成日期
* @param strDate 日期支持年月日 示例:yyyyMMdd
* @return 1970年1月1日器日期的毫秒數(shù)
*/
public static long getDateTime(String strDate) {
return getDateByFormat(strDate, "yyyyMMdd").getTime();
}
/**
* @param strDate 日期字符串
* @param format 日期格式
* @return Date
*/
public static Date getDateByFormat(String strDate, String format) {
SimpleDateFormat sdf = new SimpleDateFormat(format);
try{
return (sdf.parse(strDate));
}catch (Exception e){
return null;
}
}
例2
代碼如下 復(fù)制代碼
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class test16 {
/**
* @param args
* @throws ParseException
*/
public static void main(String[] args) throws ParseException {
// TODO Auto-generated method stub
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d1=sdf.parse("2012-09-08 10:10:10");
Date d2=sdf.parse("2012-09-15 00:00:00");
System.out.println(daysBetween(d1,d2));
System.out.println(daysBetween("2012-09-08 10:10:10","2012-09-15 00:00:00"));
}
/**
* 計(jì)算兩個(gè)日期之間相差的天數(shù)
* @param smdate 較小的時(shí)間
* @param bdate 較大的時(shí)間
* @return 相差天數(shù)
* @throws ParseException
*/
public static int daysBetween(Date smdate,Date bdate) throws ParseException
{
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
smdate=sdf.parse(sdf.format(smdate));
bdate=sdf.parse(sdf.format(bdate));
Calendar cal = Calendar.getInstance();
cal.setTime(smdate);
long time1 = cal.getTimeInMillis();
cal.setTime(bdate);
long time2 = cal.getTimeInMillis();
long between_days=(time2-time1)/(1000*3600*24);
return Integer.parseInt(String.valueOf(between_days));
}
/**
*字符串的日期格式的計(jì)算
*/
public static int daysBetween(String smdate,String bdate) throws ParseException{
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
cal.setTime(sdf.parse(smdate));
long time1 = cal.getTimeInMillis();
cal.setTime(sdf.parse(bdate));
long time2 = cal.getTimeInMillis();
long between_days=(time2-time1)/(1000*3600*24);
return Integer.parseInt(String.valueOf(between_days));
}
}
例3
代碼如下 復(fù)制代碼
//取得剩余天數(shù)
SimpleDateFormat df=new SimpleDateFormat("yyyymmdd");
Date d0=new java.util.Date();
Date d1=df.parse(end_date);
long time0=d0.getTime();
long time1=d1.getTime();
System.out.println((time1-time0)/(1000*60*60*24));
這樣算兩個(gè)時(shí)間相差的天數(shù)比較好
代碼如下 復(fù)制代碼
/**
* 計(jì)算兩個(gè)日期之間相差的天數(shù)
*
* @param date1
* @param date2
* @return
*/
public static int diffdates(Date date1, Date date2) {
int result = 0;
ElapsedTime et = new ElapsedTime();
GregorianCalendar gc1 = new GregorianCalendar();
GregorianCalendar gc2 = new GregorianCalendar();
gc1.setTime(date1);
gc2.setTime(date2);
result = et.getDays(gc1, gc2);
return result;
}
然后ElapseTime中的方法是:
代碼如下 復(fù)制代碼
public int getDays(GregorianCalendar g1, GregorianCalendar g2) {
int elapsed = 0;
GregorianCalendar gc1, gc2;
if (g2.after(g1)) {
gc2 = (GregorianCalendar) g2.clone();
gc1 = (GregorianCalendar) g1.clone();
} else {
gc2 = (GregorianCalendar) g1.clone();
gc1 = (GregorianCalendar) g2.clone();
}
gc1.clear(Calendar.MILLISECOND);
gc1.clear(Calendar.SECOND);
gc1.clear(Calendar.MINUTE);
gc1.clear(Calendar.HOUR_OF_DAY);
gc2.clear(Calendar.MILLISECOND);
gc2.clear(Calendar.SECOND);
gc2.clear(Calendar.MINUTE);
gc2.clear(Calendar.HOUR_OF_DAY);
while (gc1.before(gc2)) {
gc1.add(Calendar.DATE, 1);
elapsed++;
}
return elapsed;
}
其實(shí)使用joda最簡單
代碼如下 復(fù)制代碼
public boolean isRentalOverdue(DateTime datetimeRented) {
Period rentalPeriod = Period.days(2);
return datetimeRented.plus(rentalPeriod).isBeforeNow()
}
代碼實(shí)現(xiàn)如下:
package test01;
import java.util.Calendar;
/**
*
* @author 碼靈
* 20170905
*
*/
public class GetDay {
public static void main(String[] args) {
int currentMaxDays = getCurrentMonthDay();
int maxDaysByDate = getDaysByYearMonth(2017, 9);
System.out.println("本月天數(shù):" + currentMaxDays);
System.out.println("2017年9月天數(shù):" + maxDaysByDate);
}
/**
* 獲取當(dāng)月的 天數(shù)
*/
public static int getCurrentMonthDay() {
Calendar a = Calendar.getInstance();
a.set(Calendar.DATE, 1);
a.roll(Calendar.DATE, -1);
int maxDate = a.get(Calendar.DATE);
return maxDate;
}
/**
* 根據(jù)年 月 獲取對(duì)應(yīng)的月份 天數(shù)
*/
public static int getDaysByYearMonth(int year, int month) {
Calendar a = Calendar.getInstance();
a.set(Calendar.YEAR, year);
a.set(Calendar.MONTH, month - 1);
a.set(Calendar.DATE, 1);
a.roll(Calendar.DATE, -1);
int maxDate = a.get(Calendar.DATE);
return maxDate;
}
}