2011-07-06 37 views
1

目前我將它存儲爲字符串,但在使用GQL查詢日期時遇到問題。你應該在數據庫中存儲日期的類型是什麼?

Date date = Calendar.getInstance().getTime(); 
DateFormat formatter = new SimpleDateFormat("hh:mm:ss, z"); 
String todayDate = formatter.format(date); 

查詢:

"SELECT FROM SomeTable p WHERE date = 01/01/2011" 

錯誤: 異常:

org.datanucleus.store.appengine.query.DatastoreQuery$UnsupportedDatastoreFeatureException: Problem with query : Right side of expression is composed of unsupported components. Left: org.datanucleus.query.expression.Literal, Op:/, Right: DyadicExpression{Literal{5}/ Literal{11}}

我怎麼能按日期搜索?

+0

檢查這篇文章出來http://unix4lyfe.org/time/它是關於每個開發人員都應該知道的日期和時間 – Atzoya

+0

@Atzoya也沒有說太多重新日期,我什麼如果你處理日期而不是時間戳,會說錯誤。如果某個日期使用日期類型來處理添加日期,則沒有時區或閏秒等的複雜性 - 以秒爲單位的偏移量對於添加日期來說更爲複雜。但作爲參考說,如果你需要一個時間戳然後事情是不同的, – Mark

+0

我得到你在說什麼馬克,你是對的,如果你需要處理時間戳或日期時間考慮到更具體的需要,你應該存儲日期時間的數字格式,否則日期類型應該足夠 – Atzoya

回答

0

總是作爲一個日期 - 數據庫應該檢查它存儲的數據的類型,從而確保數據是它所說的。關於插入件上已知哪種類型的信息,請先檢查一下,而不是晚些時候沒有人知道正確的值應該是什麼。

你所得到的錯誤可能是不是因爲這個,而是因爲需要作出的日期在查詢的日期,如果類型是正確的,或者一個字符串必須爲單引號的字符串看到GQL Reference 例如

"SELECT FROM SomeTable p WHERE date = '01/01/2011'" 

但是什麼日期是06/07/2011?我認爲今天是7月6日,其他人是7月7日。所以即使你使用字符串使用ISO格式2011-07-06日期類型會隱藏這個細節使得它更容易。請注意,GQL只使用ISO格式,所以即使您獲得命令將字符串中的日期也會失敗。

但更好,因爲

SELECT FROM SomeTable p WHERE date = DATE(2011, 1, 1) 
+0

啊是啊,單引號確實工作。 如果我將日期類型更改爲日期,那麼如何將沒有時間的日期作爲日期類型獲取? – Jake

+0

啊,那就是Java--遵循Unix的時間戳方式 - 只需將小時,分鐘,秒設置爲0,並使用DataProperty而不是Time Poperty。 – Mark

+0

btw - SELECT FROM SomeTable p WHERE date = DATE(2011,1,1) - 對我不起作用,不受支持方法...? – Jake

相關問題