【问题标题】:Android SQLite: Convert long to Date and backAndroid SQLite:将 long 转换为 Date 并返回
【发布时间】:2012-04-29 08:24:35
【问题描述】:

我有一个简单的待办事项应用程序,其中每个“待办事项”都有标题、描述、完成状态、创建日期和修改日期。

Todo.java

package com.anna.todos.models;

import java.util.Date;

public class Todo {
    private long id;
    private String title;
    private String text;
    private boolean done;
    private Date createdDate;
    private Date modifiedDate;

    public Todo() {
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }

    public boolean isDone() {
        return done;
    }

    public void setDone(boolean done) {
        this.done = done;
    }

    public Date getCreatedDate() {
        return createdDate;
    }

    public void setCreatedDate(Date createdDate) {
        this.createdDate = createdDate;
    }

    public Date getModifiedDate() {
        return modifiedDate;
    }

    public void setModifiedDate(Date modifiedDate) {
        this.modifiedDate = modifiedDate;
    }
}

创建日期和修改日期以整数形式存储在 SQLite 数据库中。当我从数据库中获取它们时,我希望能够正确地将它们转换为 Date 对象,并且当我去保存待办事项时,我希望能够获得这些 Date 对象的整数或长等价物。 (这是根据另一个 StackOverflow post 的建议完成的。

以下是我用来从数据库中获取日期的代码:

    createdDate = new Date(cursor.getInt(4) * 1000);
    modifiedDate = new Date(cursor.getInt(5) * 1000);

并保存日期....

    createdDate = Calendar.getInstance().getTime();
    values.put(DatabaseHelper.TODO_CREATED_DATE, createdDate.getTime() * 1000);

我现在的问题是创建日期和修改日期没有正确转换。下面是从数据库中加载日期的调试语句:

04-29 09:21:35.649: I/TodoEditActivity(3954): populateFields() => createdDate=01 Jan 1970 10:33:01 04-29 09:21:35.649: I/TodoEditActivity(3954): populateFields() => modifiedDate=01 Jan 1970 10:34:19

以及保存日期的调试语句:

04-29 09:22:00.653: I/TodoEditActivity(3954): saveTodo() => createdDate=01 Jan 1970 10:33:01 04-29 09:22:00.653: I/TodoEditActivity(3954): saveTodo() => modifiedDate=29 Apr 2012 09:22:00

我应该做些什么来解决这个问题?

【问题讨论】:

  • 我会问自己,为什么 modifiedDate 似乎是唯一的一个
  • 事实证明,我将 cursor.getInt 的返回值乘以另一个 int 而不是 long

标签: java android sqlite date


【解决方案1】:

我怀疑数据库中存储的 createdDate 的值为 0(或一个小值)。尝试将变量设置为 cursor.getInt(4) 并对其进行调试,以便您可以验证该值是否为您提供了当前日期。如果您使用 Date.getTime() 或 Calendar.getTimeInMillis(),则不需要乘以 1000。

【讨论】:

  • 你仍然可以。尽可能长地存储日期,就像您当前所做的那样,并在需要时将它们转换回日期。然后,您可以使用 long 或日期进行计算 - 以您最熟悉的为准。
猜你喜欢
  • 2011-11-21
  • 1970-01-01
  • 1970-01-01
  • 2011-05-27
  • 2013-07-26
  • 1970-01-01
  • 2013-11-29
  • 2015-09-24
相关资源
最近更新 更多