Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将SQLLite日期整数转换为Java日期_Java_Sqlite - Fatal编程技术网

将SQLLite日期整数转换为Java日期

将SQLLite日期整数转换为Java日期,java,sqlite,Java,Sqlite,我正在使用SQLLite代码,该代码将日期存储为整数(我假设从style以来有这么多天)。我想将此int转换为日期,但此 public int getDate(){ ... Date d = new Date(m.getDate()); 似乎给了我错误的值 有什么想法吗 更新 问题1。) 如果有人有同样的问题,问题是SQLLite整数并不完全是整数。如果我打电话 item.setDate(rs.getInt("date")); 我得到一个负数,显然这是因为DB中的值大于java int的最大

我正在使用SQLLite代码,该代码将日期存储为整数(我假设从style以来有这么多天)。我想将此int转换为日期,但此

public int getDate(){
...
Date d = new Date(m.getDate());
似乎给了我错误的值

有什么想法吗

更新

问题1。)

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

item.setDate(rs.getInt("date"));
我得到一个负数,显然这是因为DB中的值大于java int的最大值

item.setDate(rs.getLong("date"));
该值与预期值相同。这与创建为整数的表值无关

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

Date d = new Date(m.getDate()*1000L);
给我的日期是886-10-29,看起来也不对

更新2


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

这里有几个问题

  • SQLLite中的整数类型显然比Java中的整数类型长。这意味着仅仅因为它说整数并不意味着你应该使用整数。在我的例子中,我需要使用long来获得正确的值

    rs.getLong(“日期”)

  • 将日期添加为整数的应用程序存储的细节太多。为了让它发挥作用,我不得不把最后3个角色都甩了

    字符串s=String.valueOf(rs.getLong(“日期”)

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

    item.setDate(Long.parseLong)


  • 一旦这两项都完成了,它似乎就可以正确地处理了。如果有人对正在发生的事情有更详细/更好的链接,请随时详细说明检查。

    这里有几个问题

  • SQLLite中的整数类型显然比Java中的整数类型长。这意味着仅仅因为它说整数并不意味着你应该使用整数。在我的例子中,我需要使用long来获得正确的值

    rs.getLong(“日期”)

  • 将日期添加为整数的应用程序存储的细节太多。为了让它发挥作用,我不得不把最后3个角色都甩了

    字符串s=String.valueOf(rs.getLong(“日期”)

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

    item.setDate(Long.parseLong)


  • 一旦这两项都完成了,它似乎就可以正确地处理了。如果有人对正在发生的事情有更详细/更好的链接,请随时详细说明以供检查。

    SQLLite整数最多可以有8个字节(-2^63到2^63-1);看

    Java整数只有4个字节(-2^31到2^31-1);a长为8字节;看

    现在距离UNIX时代已经1384621644秒了;这是138462164000毫秒或138462164000000微秒。因为它们大于4字节(4294967295),所以您肯定需要一个Java长文件来保存它们

    看起来你的时间戳是以微秒为单位的。
    java.util.Date
    构造函数从纪元开始需要毫秒。你可以从微秒除以1000来计算毫秒;无需转换为字符串并返回:


    item.setDate(rs.getLong(“日期”)/1000)

    SQLLite整数最多可以有8个字节(-2^63到2^63-1);看

    Java整数只有4个字节(-2^31到2^31-1);a长为8字节;看

    现在距离UNIX时代已经1384621644秒了;这是138462164000毫秒或138462164000000微秒。因为它们大于4字节(4294967295),所以您肯定需要一个Java长文件来保存它们

    看起来你的时间戳是以微秒为单位的。
    java.util.Date
    构造函数从纪元开始需要毫秒。你可以从微秒除以1000来计算毫秒;无需转换为字符串并返回:


    item.setDate(rs.getLong(“日期”)/1000)

    您可以发布一个示例SQLLite整数值和您期望的日期吗?java.util.Date从1/1/70开始需要毫秒,而不是天。您可以发布一个示例SQLLite整数值和您需要的日期吗?java.util.Date期望从1970年1月1日起的毫秒,而不是天。非常感谢您的评论,最后一行除外。你试过了吗?因为当我这样做的时候,我得到了一个编译时异常,说它不能将double转换为long。当然,我使用了1000L而不是1000。此外,我浏览了您之前发布的SQLLite页面,但我没有看到它在哪里列出了数据类型的大小,这对我很有用:
    long ts=13846216440000L;日期dt=新日期(ts/1000)整数大小信息位于存储类和数据类型部分:整数下。该值是一个有符号整数,存储在1、2、3、4、6或8字节中,具体取决于该值的大小。除了最后一行之外,非常感谢您的评论。你试过了吗?因为当我这样做的时候,我得到了一个编译时异常,说它不能将double转换为long。当然,我使用了1000L而不是1000。此外,我浏览了您之前发布的SQLLite页面,但我没有看到它在哪里列出了数据类型的大小,这对我很有用:
    long ts=13846216440000L;日期dt=新日期(ts/1000)整数大小信息位于存储类和数据类型部分:整数下。该值是有符号整数,根据值的大小存储在1、2、3、4、6或8字节中。