将SQLite Date Integer转换为Java Date

时间:2013-11-15 17:35:00

标签: java sqlite

我正在使用SQLLite代码将日期存储为整数(我假设自样式以来的这么多天)。我想把这个int转换为日期但是......

public int getDate(){
...
Date d = new Date(m.getDate());

似乎给了我错误的价值。

有什么想法吗?

更新

问题1。)

如果有人遇到同样的问题,问题是SQLLite Integer不完全是整数。如果我打电话......

item.setDate(rs.getInt("date"));

我得到一个负数,显然这是因为DB中的值大于java int的最大值。一旦我改为......

item.setDate(rs.getLong("date"));

该值与预期一致。尽管将表值创建为INTEGER。

现在我得到了与DB匹配的值“1383769720540277”,但是......

Date d = new Date(m.getDate()*1000L);

给我一​​个886-10-29的日期,这看起来也不正确

更新2

根据this工具,它必须以毫秒* 1000为单位。我正在研究一种方法来处理这个问题,因为.001是双精度的,不能用于创建长而不舍入。

2 个答案:

答案 0 :(得分:1)

一个SQLLite整数最多可以是8个字节(-2 ^ 63到2 ^ 63-1);见http://www.sqlite.org/datatype3.html

Java整数只有4个字节(-2 ^ 31到2 ^ 31-1);长是8个字节;见http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

现在是UNIX时代以来的1,384,621,644秒;这是1,384,621,644,000毫秒或1,384,621,644,000,000微秒。你肯定需要一个Java来保存它们,因为它们大于4个字节(4,294,967,295)

看起来您的时间戳以微秒为单位。 java.util.Date构造函数自纪元以来需要毫秒。您可以通过除以1000来计算毫微秒(毫秒);无需转换为字符串并返回:

item.setDate(rs.getLong("date")/1000);

答案 1 :(得分:0)

这里有几个问题......

  1. SQLLite中的Integer类型显然比Java中的Integer类型长。这意味着只是因为它表示Integer并不意味着你应该使用整数。在我的情况下,我需要使用long来获得正确的值。

    rs.getLong("日期&#34);

  2. 将Date添加为整数的应用程序存储了太多细节。为了使它工作,我不得不放弃最后3个字符。

    String s = String.valueOf(rs.getLong(" date"));

    s = s.substring(0,s.length() - 3);

    item.setDate(的Long.parseLong(S));

  3. 一旦完成这两项工作,它似乎正确处理。如果某人有更多关于正在发生的事情的详细/更好的链接,请随时详细说明检查。