0

我有一个 Android 项目,它采用 WS 提供的对象,其中包括一个像这样的时间戳属性:

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

“开始”、“重启”和“结束”都是 UTC 时间戳。我希望 ORMLitejava.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。我猜这是时代。

这是可能的还是我需要将对象保存为整数并在每次访问它时进行转换?

4

1 回答 1

2

但是,在数据库中,时间戳始终是:1970-01-16 21:02:16.000194。我猜这是时代。

正如@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为更有效的数据库中,但您仍然需要执行* 1000. DATE_LONG只是将日期存储为长时间毫秒。

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

顺便说一句,该值是自纪元以来的秒数,而不是时间戳。此外,对于 nitpick,SQL 中有一个时间戳数据库实体类型,因此您可以考虑将字段名称更改为date.

于 2013-06-21T12:51:13.530 回答