-1
A
回答
1
試試這個
java.text.DateFormat df = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
java.util.Date date1 = df.parse("2012-09-30 15:26:14+00");
java.util.Date date2 = df.parse("2012-08-30 15:26:14+00");
int diff = getMonthDifference(date1, date2);
System.out.println(diff);
public static int getMonthDifference(java.util.Date date1, java.util.Date date2) {
if (date1.after(date2)) {
return getMonthDifference0(date1, date2);
} else if (date2.after(date1)) {
return -getMonthDifference0(date2, date1);
}
return 0;
}
private static int getMonthDifference0(java.util.Date date1, java.util.Date date2) {
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
c1.setTime(date1);
c2.setTime(date2);
int diff = 0;
while (c2.getTimeInMillis() < c1.getTimeInMillis()) {
c2.add(Calendar.MONTH, 1);
diff++;
}
int dd = c2.get(Calendar.DAY_OF_MONTH) - c1.get(Calendar.DAY_OF_MONTH);
if (dd > 0) {
diff--;
} else if (dd == 0) {
int hd = c2.get(Calendar.HOUR_OF_DAY) - c1.get(Calendar.HOUR_OF_DAY);
if (hd > 0) {
diff++;
} else if (hd == 0) {
long t1 = c1.getTimeInMillis() % (60 * 1000);
long t2 = c2.getTimeInMillis() % (60 * 1000);
if (t2 > t1) {
diff--;
}
}
}
return diff;
}
+1
我以前使用過這種方法,雖然它很好,但在處理DST和標準日期時有問題,例如,嘗試獲取格林威治標準時間2013-03-09和2013-03-12之間的天數。 –
7
使用喬達時庫爲更好地處理日期http://joda-time.sourceforge.net/
像這樣的事情Days.daysBetween(first DateTime, second DateTime).getDays();
1
我會做這樣的
Calendar c1 = new GregorianCalendar(2012, 0, 1);
Calendar c2 = new GregorianCalendar(2013, 0, 2);
int monthDiff = (c2.get(Calendar.YEAR) - c1.get(Calendar.YEAR)) * 12 + c2.get(Calendar.MONTH) - c1.get(Calendar.MONTH);
int dayDiff;
if (c1.get(Calendar.DATE) < c2.get(Calendar.DATE)) {
monthDiff--;
dayDiff = c1.getActualMaximum(Calendar.DAY_OF_MONTH) - c1.get(Calendar.DATE) + c2.get(Calendar.DATE);
} else {
dayDiff = c2.get(Calendar.DATE) - c1.get(Calendar.DATE);
}
System.out.println(monthDiff + " " + dayDiff);
+1
在短距離和相同時區內,這是可以的,但是當你擴大範圍並開始處理諸如閏年和秒,世紀交叉之類的事情時,它就開始受到影響, – MadProgrammer
0
沒有人說console.log(new Date(「2013-09-30」) - 新日期(「2012-01-01」));它會以毫秒爲單位給出差異。在創建這兩個對象時,它由您來處理時區等等。
相關問題
- 1. Grails - 兩個日期之間的差異
- 2. VB - 兩個日期之間的差異
- 3. Javascript - 兩個日期之間的差異
- 4. 兩個表之間的日期差異
- 5. 兩個日期之間的差異
- 6. 兩個日期之間的差異python
- 7. 兩個日期之間的Ruby差異
- 8. 兩個日期()之間的JavaScript差異
- 9. 兩個日期之間的oracle差異
- 10. 兩個日期之間的差異
- 11. 兩個日期之間的差異Yii2
- 12. 在兩個日期之間的差異
- 13. 兩個Java日期之間的差異?
- 14. 兩個日期之間的Android差異?
- 15. Java:兩個日期之間的差異
- 16. 在兩個日期(日期時間)之間的差異
- 17. Adobe Air中兩個日期之間的日期差異
- 18. 排序依據日期兩個日期列之間的差異
- 19. 兩個日期之間的日期差異
- 20. 兩個日期之間的SQL查詢日期差異
- 21. 兩個日期之間的c + +日期差異
- 22. 日期之間的差異
- 23. 日期之間的差異
- 24. 在兩個日期之間獲取日期差異
- 25. 在Android的兩個日期之間差異的(年,月,日)
- 26. 兩個日期之間的星期/月的差異
- 27. 計算javascript中兩個日曆日期之間的差異
- 28. 如何找到兩個日期之間的星期差異
- 29. 如何獲得兩個日期之間的星期差異
- 30. excel中兩個日期之間的差異僅包括假期
簡短的回答是使用[JodaTime](http://joda-time.sourceforge.net/) - 它處理的東西,如閏年,秒和所有有趣的東西 – MadProgrammer
可能重複的[計算兩之間的差異Java日期實例](http://stackoverflow.com/questions/1555262/calculating-the-difference-between-two-java-date-instances) – CoolBeans
請參閱[這個答案](http://stackoverflow.com/a/ 16067960/1288408)使用Joda Time解決方案。 –