2013-06-21 196 views
0

我有一個走的是一條WS提供的對象包括屬性,是這樣的時間戳的Android項目:ORMLite時間戳轉換爲日期

{ 
    "id": "106471", 
    "start": "1371736194", 
    "restart": "0", 
    "end": "1371736194", 
    "elapsed": "0", 
    } 

「開始」,「重啓」 &「結束」是UTC中的所有時間戳。我希望ORMLite在保存到數據庫時自動將它們轉換爲java.util.Date類型。我所做的是這樣的:

@DatabaseTable(tableName = "answers", daoClass=AnswerDao.class) 
public class Answer extends Entity<Answer> { 
    private static final long serialVersionUID = -7486241451710750676L; 

    @DatabaseField(id = true) 
    @JsonProperty("id") 
    private Integer _id; 
    public static String ID = "_id"; 

    @DatabaseField 
    @JsonProperty("end") 
    private Date timestamp; 
    ... 
} 

然而,在數據庫中,時間戳始終是:1970-01-16 21:02:16.000194。我認爲這是一個時代。

這是否可能,或者是否需要將對象保存爲整數,並在每次訪問時都轉換它?

+1

你在你的json中得到的秒數不是毫秒。可能你的問題是由於這個事實 – Blackbelt

+0

我同意這一點,任何想法我可以做些什麼來糾正它? –

+0

乘以數字x 1000或更改後端 – Blackbelt

回答

2

但是,在數據庫中,時間戳總是:1970-01-16 21:02:16000194。我認爲這是一個時代。

由於@blackbelt指出1371736194是以毫秒爲單位的時間而不是毫秒。我假設你正在做的是這樣的:

Answer answer = new Answer(); 
// the time field comes from a json variable 
json.start = 1371736194; 
answer.setTimestamp(new Date(json.start)); 

你需要將該數字乘以1000,然後再添加到日期。 start應該很長。

json.start *= 1000; 
answer.setTimestamp(new Date(json.start)); 

如果你乘以1000,那麼你應該得到有效的日期/時間Thu Jun 20 09:49:54 2013 EDT

如果你需要自動地做到這一點,那麼你可以創建自己的自定義數據類型:

http://ormlite.com/docs/custom-data-types

不過,我想你想你的日期字段有效你堅持下去之前到ORMLite

這是在所有可能或我需要保存對象作爲一個整數並將其轉換每次我訪問它?

您可以將它作爲DATE_LONG保存在更高效的數據庫中,但仍需要執行* 1000DATE_LONG只是將日期存儲爲很長的時間毫秒。

@DatabaseField(dataType = DataType.DATE_LONG) 
private Date timestamp; 

順便說一下,那裏的值是自時代以來的秒數,而不是時間戳。此外,對於挑選,SQL中有一個時間戳數據庫實體類型,因此您可以考慮將字段名稱更改爲date

+0

都是如此。我去了自定義數據類型路徑 –