2011-08-05 56 views
3

我插入一些數據到Sqlite數據庫中,並在插入前檢查是否存在這一天的記錄。要檢查這一點,我必須看看如果天數> 0。例如2011-8-6和2011-8-5之間的差異(以天爲單位)是1.如何在Java中執行此操作?如何減去2個java.sql.Date日期?

編輯: 作爲@RayToal提到的,這可能在數據庫中完成的,所以我做了這樣:

SELECT julianday('now') - julianday(Date(Date)) from VIDEO_HISTORY; 

只有這樣的問題是,它給我的十進制數。例如:3.3442346529103816 現在我必須決定內部Java如果給定數量是4天的3。 它的代碼是爲應用程序搜索某個術語的YouTube並將有關每日視圖的統計數據寫入數據庫。用戶可以例如每天20:00點安排工作。但是他可以決定在10:00點重新安排這項工作,所以程序員必須明白這一點,差別是有一天。所以很明顯,我必須四捨五入到第一個更大的數字。有沒有一些方法或我必須自己寫?

EDIT2:據@提供的鏈接邁克爾-O,這是最好的解決方法(使用JodaTime):

DateTime start = new DateTime(new GregorianCalendar(2011, 8, 4).getTime()); 
DateTime end = new DateTime(new GregorianCalendar(2011, 8, 8).getTime()); 

int numberOfDays = Days.daysBetween(start.toDateMidnight(), end.toDateMidnight()).getDays(); 
System.out.println(numberOfDays); 
+2

2011-8-6和2011-8-6之間的區別實際上是0.順便說一下,由於數據顯然存儲在數據庫中,因此您有什麼理由不使用SQL? – BalusC

+2

既然你應該使用數據庫來計算這個,我會說這個問題是http://stackoverflow.com/questions/289680/difference-between-2-dates-in-sqlite的dup。如果由於某種原因,你有使用Java進行計算,請這麼說。然後看看Joda-Time。 :) –

+0

@BalucC對不起,這是「lapsus calami」,我編輯了這個。 –

回答

3

你可能想諮詢this教程。此外,你應該考慮使用Joda時間的Period並在stackoverflow上諮詢this答案。

1

如果你想的日曆天數(在java.time用語中Period),然後(在Java中8)使用方法:

import java.time.temporal.ChronoUnit; 
import java.time.LocalDate; 
ChronoUnit.DAYS.between(LocalDate.parse(from.toString()),LocalDate.parse(to.toString()) 

(這避免了subtle bug在Java中8的java.sql中.Date API)

如果您希望天數爲Duration(以24小時爲單位,實際耗用的時間),則使用Marcelo's方法。