java日期差,java時間比較年月日差幾天

本文目錄一覽:

Java計算兩個日期時間相差幾天,幾小時,幾分鐘等

思路是先計算兩個日期相差的毫秒數,然後分別根據每天的毫秒數、每小時的毫秒數、每分鐘的毫秒數來計算相差幾天,幾小時,幾分鐘。具體代碼如下:

public static String getDatePoor(Date endDate, Date nowDate) {

long nd = 1000 * 24 * 60 * 60;//每天毫秒數

long nh = 1000 * 60 * 60;//每小時毫秒數

long nm = 1000 * 60;//每分鐘毫秒數

long diff = endDate.getTime() – nowDate.getTime(); // 獲得兩個時間的毫秒時間差異

long day = diff / nd;   // 計算差多少天

long hour = diff % nd / nh; // 計算差多少小時

long min = diff % nd % nh / nm;  // 計算差多少分鐘

return day + “天” + hour + “小時” + min + “分鐘”;

}

然後做一個測試,調用這個方法測試一下:

可以看出兩個日期時間相差幾天,幾小時,幾分鐘都可以算出來。

擴展資料:

Java使用以下三種方法來比較兩個日期:

1、使用 getTime() 方法獲取兩個日期(自1970年1月1日經歷的毫秒數值),然後比較這兩個值。

2、使用方法 before(),after() 和 equals()。例如,一個月的12號比18號早,則 new Date(99, 2, 12).before(new Date (99, 2, 18)) 返回true。

3、使用 compareTo() 方法,它是由 Comparable 介面定義的,Date 類實現了這個介面。

參考資料:

Oracle官方API介面-Util-Date

Oracle官方API介面-SimpleDateFormat

菜鳥教程-Java 日期時間

java中如何計算出兩個日期之間相差多少天

思路就是根據它們相差的毫秒數除以每天的毫秒數(60*60*24*1000),代碼如下:

public static void main(String[] args) throws ParseException {

String date1=”1987-01-01″;

String date2=”2010-01-01″;

SimpleDateFormat sdf=new SimpleDateFormat(“yyyy-mm-dd”);

Date d1=sdf.parse(date1);

Date d2=sdf.parse(date2);

long daysBetween=(d2.getTime()-d1.getTime()+1000000)/(60*60*24*1000);

System.out.println(“1987-01-01 與 2010-01-01 相隔 “+daysBetween+” 天”);

}

運行結果如下:

擴展資料:

Java使用以下三種方法來比較兩個日期:

1、使用 getTime() 方法獲取兩個日期(自1970年1月1日經歷的毫秒數值),然後比較這兩個值。

2、使用方法 before(),after() 和 equals()。例如,一個月的12號比18號早,則 new Date(99, 2, 12).before(new Date (99, 2, 18)) 返回true。

3、使用 compareTo() 方法,它是由 Comparable 介面定義的,Date 類實現了這個介面。

SimpleDateFormat 是一個以語言環境敏感的方式來格式化和分析日期的類。SimpleDateFormat 允許你選擇任何用戶自定義日期時間格式來運行

例如:

SimpleDateFormat ft = new SimpleDateFormat (“yyyy-MM-dd hh:mm:ss”);

這一行代碼確立了轉換的格式,其中 yyyy 是完整的公元年,MM 是月份,dd 是日期,HH:mm:ss 是時、分、秒。

注意:有的格式大寫,有的格式小寫,例如 MM 是月份,mm 是分;HH 是 24 小時制,而 hh 是 12 小時制。

以上實例編譯運行結果如下:

當前時間為: 2018-09-14 10:16:34

參考資料:

Java官方API介面-Date

菜鳥教程-Java 日期時間

java計算兩個日期相差多少天小時分鐘等

Java計算兩個日期時間相差幾天,幾小時,幾分鐘,其實好簡單就可以實現jsp,java中計算兩個時間差了

public class Test {

public void dateDiff(String startTime, String endTime, String format) {

//按照傳入的格式生成一個simpledateformate對象

SimpleDateFormat sd = new SimpleDateFormat(format);

long nd = 1000*24*60*60;//一天的毫秒數

long nh = 1000*60*60;//一小時的毫秒數

long nm = 1000*60;//一分鐘的毫秒數

long ns = 1000;//一秒鐘的毫秒數long diff;try {

//獲得兩個時間的毫秒時間差異

diff = sd.parse(endTime).getTime() – sd.parse(startTime).getTime();

long day = diff/nd;//計算差多少天

long hour = diff%nd/nh;//計算差多少小時

long min = diff%nd%nh/nm;//計算差多少分鐘

long sec = diff%nd%nh%nm/ns;//計算差多少秒//輸出結果

System.out.println(“時間相差:”+day+”天”+hour+”小時”+min+”分鐘”+sec+”秒。”);

java中計算兩個日期之間差的天數

在Java開發物流或是其他功能的時候會用到兩個日期相差多天的數據,所以整理了一下備用。

調用方式:

代碼如下 複製代碼

long date1 = getDateTime(“20121201”);//可改成自己的日期類型,但以「20121212」這種格式

long date2 = getDateTime(“20121212”);

int day = dateInterval(date1, date2);

System.out.println(day);

具體實現方法調用:

代碼如下 複製代碼

/**

* 計算出兩個日期之間相差的天數

* 建議date1 大於 date2 這樣計算的值為正數

* @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 該類是一個抽象類

// 提供了豐富的日曆欄位

// 本程序中使用到了

// Calendar.YEAR 日期中的年份

// Calendar.DAY_OF_YEAR 當前年中的天數

// getActualMaximum(Calendar.DAY_OF_YEAR) 返回今年是 365 天還是366天

Calendar calendar1 = Calendar.getInstance(); // 獲得一個日曆

calendar1.setTimeInMillis(date1); // 用給定的 long 值設置此 Calendar 的當前時間值。

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;

}

/**

* 日期間隔計算

* 計算公式(示例):

* 20121201- 20121212

* 取出20121201這一年過了多少天 d1 = 天數 取出20121212這一年過了多少天 d2 = 天數

* 如果2012年這一年有366天就要讓間隔的天數+1,因為2月份有29日。

* @param maxDays 用於記錄一年中有365天還是366天

* @param d1 表示在這年中過了多少天

* @param d2 表示在這年中過了多少天

* @param y1 當前為2012年

* @param y2 當前為2012年

* @param calendar 根據日曆對象來獲取一年中有多少天

* @return 計算後日期間隔的天數

*/

public static int numerical(int maxDays, int d1, int d2, int y1, int y2, Calendar calendar){

int day = d1 – d2;

int betweenYears = y1 – y2;

List d366 = new ArrayList();

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++) {

// 當年 + 1 設置下一年中有多少天

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

maxDays = calendar.getActualMaximum(Calendar.DAY_OF_YEAR);

// 第一個 366 天不用 + 1 將所有366記錄,先不進行加入然後再少加一個

if(maxDays != 366){

day += maxDays;

}else{

d366.add(maxDays);

}

// 如果最後一個 maxDays 等於366 day – 1

if(i == betweenYears-1 betweenYears 1 maxDays == 366){

day -= 1;

}

}

for(int i = 0; i d366.size(); i++){

// 一個或一個以上的366天

if(d366.size() = 1){

day += d366.get(i);

}

}

return day;

}

/**

* 將日期字元串裝換成日期

* @param strDate 日期支持年月日 示例:yyyyMMdd

* @return 1970年1月1日器日期的毫秒數

*/

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

代碼如下 複製代碼

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”));

}

/**

* 計算兩個日期之間相差的天數

* @param smdate 較小的時間

* @param bdate 較大的時間

* @return 相差天數

* @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));

}

/**

*字元串的日期格式的計算

*/

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

代碼如下 複製代碼

//取得剩餘天數

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));

這樣算兩個時間相差的天數比較好

代碼如下 複製代碼

/**

* 計算兩個日期之間相差的天數

*

* @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中的方法是:

代碼如下 複製代碼

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;

}

其實使用joda最簡單

代碼如下 複製代碼

public boolean isRentalOverdue(DateTime datetimeRented) {

Period rentalPeriod = Period.days(2);

return datetimeRented.plus(rentalPeriod).isBeforeNow()

}

原創文章,作者:AFEU,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/141260.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
AFEU的頭像AFEU
上一篇 2024-10-04 00:24
下一篇 2024-10-04 00:24

相關推薦

  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • 解決docker-compose 容器時間和伺服器時間不同步問題

    docker-compose是一種工具,能夠讓您使用YAML文件來定義和運行多個容器。然而,有時候容器的時間與伺服器時間不同步,導致一些不必要的錯誤和麻煩。以下是解決方法的詳細介紹…

    編程 2025-04-29
  • Python獲取當前日期的多種方法

    本文介紹如何使用Python獲取當前日期,並提供了多種方法,包括使用datetime模塊、time模塊以及第三方庫dateutil等。讓我們一步一步來看。 一、使用datetime…

    編程 2025-04-29
  • 想把你和時間藏起來

    如果你覺得時間過得太快,每天都過得太匆忙,那麼你是否曾經想過想把時間藏起來,慢慢享受每一個瞬間?在這篇文章中,我們將會從多個方面,詳細地闡述如何想把你和時間藏起來。 一、一些時間管…

    編程 2025-04-28
  • Python按照日期畫折線圖

    本文將為您詳細介紹如何使用Python按照日期(時間)來畫折線圖。 一、準備工作 首先,我們需要安裝Matplotlib包,該包提供了各種繪圖函數,包括折線圖、柱形圖、散點圖等等。…

    編程 2025-04-28
  • 計算斐波那契數列的時間複雜度解析

    斐波那契數列是一個數列,其中每個數都是前兩個數的和,第一個數和第二個數都是1。斐波那契數列的前幾項為:1,1,2,3,5,8,13,21,34,…。計算斐波那契數列常用…

    編程 2025-04-28
  • 時間戳秒級可以用int嗎

    時間戳是指從某個固定的時間點開始計算的已經過去的時間。在計算機領域,時間戳通常使用秒級或毫秒級來表示。在實際使用中,我們經常會遇到需要將時間戳轉換為整數類型的情況。那麼,時間戳秒級…

    編程 2025-04-28
  • 如何在ACM競賽中優化開發時間

    ACM競賽旨在提高程序員的演算法能力和解決問題的實力,然而在比賽中優化開發時間同樣至關重要。 一、規劃賽前準備 1、提前熟悉比賽規則和題目類型,了解常見演算法、數據結構和快速編寫代碼的…

    編程 2025-04-28
  • Python如何輸入日期

    Python是一種非常流行的編程語言,它可以讓開發人員輕鬆地處理日期時間。在本文中,我們將詳細介紹Python如何輸入日期的方法,無論您是在處理日期時間的數據分析還是在創建Web應…

    編程 2025-04-28
  • Python提取身份證號碼的年月日和性別代碼

    本文將從以下幾個方面對Python提取身份證號碼的年月日和性別代碼進行詳細闡述。代碼示例見下文。 一、Python計算身份證號碼中的生日 身份證號碼中前6位為出生年月日信息,其中前…

    編程 2025-04-28

發表回復

登錄後才能評論