2013-06-21 164 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

都是如此。我去了自定义数据类型路径 –