2011-08-06 71 views
0

我在數據庫中有這樣的XML 50000所記載:currentTimeMillis()函數和特殊日期的Java差異 - MySQL?

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
<urlMD5>11ca7070ad6eb3180c53281e7b597976</urlMD5> 
<date> 
<year>2011</year> 
<month>8</month> 
<day>6</day> 
<h>19</h> 
<m>26</m> 
<s>40</s> 
</date> 
<enc>utf-8</enc> 
</root> 

正如你看到的,我保存在分離格式的日期。 現在我需要提取這些日子的currentTimeMillis()並將其保存到新字段中的數據庫中。 因此,我可以輕鬆地將它們與當前currentTimeMillis()進行比較,並找出最近兩天內存儲的文檔。 例如:

int ct = currentTimeMillis(); 

Class.forName("com.mysql.jdbc.Driver"); 
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/crawler?" + "user=root&password=&useUnicode=true&characterEncoding=UTF-8"); 
Statement stat = conn.createStatement(); 
ResultSet rs = st.executeQuery("SELECT * FROM DBName WHERE ct - 60 * 60 * 24 * 2 > timeField"); 

而且因爲我想利用這個領域這麼多次,我想用一個簡單的查詢,我不想每次提取XML格式。

問題是的currentTimeMillis()函數的計算,從1970年1月1日,通過的currentTimeMillis,我需要計算與我的數據是一樣的。 我寫了下面的與我使用之前存儲XML數據,以確保如果我能做到這一點還是不一樣的代碼代碼:

int s = 0; 
s += (Calendar.getInstance().get(Calendar.YEAR) - 1970) * 60 * 60 * 24 * 365; 
s += (Calendar.getInstance().get(Calendar.MONTH)) * 60 * 60 * 24 * 31; 
s += (Calendar.getInstance().get(Calendar.DAY_OF_MONTH) * 60 * 60 * 24); 
s += (Calendar.getInstance().get(Calendar.HOUR_OF_DAY) * 60 * 60); 
s += (Calendar.getInstance().get(Calendar.MINUTE) * 60); 
s += (Calendar.getInstance().get(Calendar.SECOND)); 
System.out.println(s); 
System.out.println(System.currentTimeMillis()/1000); 

但結果是不一樣的:

1312313680 
1312643080 

其中一個原因是因爲不是每個月都有31天。

任何方式,我需要幫助找出我怎麼能計算與特殊的日子,而不是當前日期的currentTimeMillis?

我要指出,我使用MySQL,所以也許我可以保存特殊格式的日期,我可以用SQL查詢比較?

回答

1

使用Google日曆的設置方法:

Calendar c = Calendar.getInstance(); 
c.set(Calendar.YEAR, year); 
c.set(Calendar.MONTH, month); 

,然後提取的毫秒數與c.getTime().getTime()

+0

謝謝 它的工作! 完成後應該重置日曆嗎? – Soheil

+0

重置是什麼意思?您可以多次重複使用同一個Calendar對象,前提是您不要忘記設置每個字段,從年份到毫秒。 –

+0

我的錯誤,你是對的。 – Soheil