3 回答

TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超6個贊
方法:1
try {
DateFormat df = new SimpleDateFormat("dd-MM-yyyy hh:mm:ss");
Date date1 = new java.util.Date();
Date date2 = df.parse("04-02-2019 12:00:00");
long diff = date2.getTime() - date1.getTime();
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(diff);
int year = cal.get(Calendar.YEAR);
Log.e("Diff Year" , year+ " --" + diff);
Log.e("Diff Value" , date1.getTime() + " -- " + date2.getTime() + " --" + diff);
} catch (ParseException e){
Log.e("Diff Value", "Exception", e.getMessage().toString());
}
方法:2
LocalDate d1 = LocalDate.parse("2017-04-02",
DateTimeFormatter.ISO_LOCAL_DATE);
LocalDate d2 = LocalDate.parse("2018-04-04",
DateTimeFormatter.ISO_LOCAL_DATE);
Duration dateDifference = Duration.between(d1.atStartOfDay(),
d2.atStartOfDay());
long dayDifference = dateDifference.toDays();
減去兩個日期并在對象中添加差異值 Calendar并從其對象中檢索年份值。

TA貢獻(xiàn)1854條經(jīng)驗(yàn) 獲得超8個贊
LocalDate d1 = LocalDate.parse("2018-05-26", DateTimeFormatter.ISO_LOCAL_DATE);
LocalDate d2 = LocalDate.parse("2018-05-28", DateTimeFormatter.ISO_LOCAL_DATE);
Duration diff = Duration.between(d1.atStartOfDay(), d2.atStartOfDay());
long diffDays = diff.toDays();
您將獲得長格式的天數(shù)。另請參閱 Mark Byers 的這個答案。

TA貢獻(xiàn)1788條經(jīng)驗(yàn) 獲得超4個贊
LocalDate // Represent a date-only value, without time-of-day and without time zone.
.of( 1999 , 1 , 23 ) // Use factory methods to instantiate rather than constructors, in the *java.time* classes.
.minusWeeks( 12 ) // Do date-math with `plus…` and `…minus` methods.
.toString() // Generate text as a `String` object with text representing the date value in standard ISO 8601 format: YYYY-MM-DD
請參閱在 IdeOne.com 上實(shí)時運(yùn)行的代碼。
1998-10-31
避免遺留的日期時間類
永遠(yuǎn)不要使用Calendar或Date類。那些可怕的類在幾年前被java.time類所取代。
LocalDate
該類LocalDate表示沒有時間、沒有時區(qū)或從 UTC 偏移的僅日期值。
時區(qū)對于確定日期至關(guān)重要。對于任何給定的時刻,日期在全球范圍內(nèi)因區(qū)域而異。例如,法國巴黎午夜過后幾分鐘是新的一天,而魁北克蒙特利爾仍然是“昨天” 。
如果未指定時區(qū),JVM 會隱式應(yīng)用其當(dāng)前默認(rèn)時區(qū)。該默認(rèn)值可能會在運(yùn)行時(!)期間隨時更改,因此您的結(jié)果可能會有所不同。最好將您想要/預(yù)期的時區(qū)明確指定為參數(shù)。
以、或等格式指定適當(dāng)?shù)臅r區(qū)名稱。永遠(yuǎn)不要使用 2-4 個字母的縮寫,例如或因?yàn)樗鼈儾皇钦嬲臅r區(qū),不是標(biāo)準(zhǔn)化的,甚至不是唯一的(!)。Continent/RegionAmerica/MontrealAfrica/CasablancaPacific/AucklandESTIST
ZoneId z = ZoneId.of( "America/Montreal" ) ;
LocalDate today = LocalDate.now( z ) ;
如果你想使用 JVM 的當(dāng)前默認(rèn)時區(qū),請求它并作為參數(shù)傳遞。如果省略,代碼會變得模棱兩可,因?yàn)槲覀儾淮_定您是否打算使用默認(rèn)值,或者您是否像許多程序員一樣沒有意識到這個問題。
ZoneId z = ZoneId.systemDefault() ; // Get JVM’s current default time zone.
或指定日期。您可以通過數(shù)字設(shè)置月份,1 月至 12 月的編號為 1-12。
LocalDate ld = LocalDate.of( 1986 , 2 , 23 ) ; // Years use sane direct numbering (1986 means year 1986). Months use sane numbering, 1-12 for January-December.
或者,更好的是,使用Month預(yù)定義的枚舉對象,一年中的每個月一個。提示:Month在整個代碼庫中使用這些對象,而不是僅僅使用整數(shù),以使您的代碼更具自文檔性、確保有效值并提供類型安全。Year&同上YearMonth。
LocalDate ld = LocalDate.of( 1986 , Month.FEBRUARY , 23 ) ;
Period
要以年-月-日表示時間跨度,請使用Period.
Period p = Period.ofDays( 5 ) ;
日期時間數(shù)學(xué)
您可以通過調(diào)用and方法在java.time中執(zhí)行日期時間值的加法和減法。plus…minus…
LocalDate later = ldt.plus( p ) ;
Duration
如果您想用天(24 小時的時間塊,與日歷無關(guān))、小時、分鐘、秒和小數(shù)秒來表示時間跨度,請使用Duration.
年
您的問題不清楚,但似乎是關(guān)于 2000 年。java.time類的那一年沒有什么特別之處。
您可以查詢java.time類的年份值。
int year = ld.getYear() ;
if( year < 2000 ) { … }
添加回答
舉報