Java日期和时间戳

Java日期和时间戳,java,date,timestamp,Java,Date,Timestamp,考虑以下代码:- String t = "2013-10-05 09:10:37.029074"; Timestamp ts = Timestamp.valueOf(t); Date d = new Date(ts.getTime()); Timestamp ts2 = new java.sql.Timestamp(d.getTime()); System.out.println("ts -->"+ts);

考虑以下代码:-

        String t = "2013-10-05 09:10:37.029074";
        Timestamp ts = Timestamp.valueOf(t);

        Date d = new Date(ts.getTime());
        Timestamp ts2 = new java.sql.Timestamp(d.getTime());
        System.out.println("ts -->"+ts);
        System.out.println("ts2-->"+ts2);
当我运行这个时,我得到的结果是

ts -->2013-10-05 09:10:37.029074           ts2-->2013-10-05 09:10:37.029
我不想忽略milisecods(请参见029074和029之间的差异)。似乎是四舍五入


我甚至想保留分数。

日期类的精度只有毫秒。它无法存储更高的精度

:

类日期表示特定的时间瞬间,精度为毫秒


Date
类只有毫秒精度。它无法存储更高的精度

:

类日期表示特定的时间瞬间,精度为毫秒


时间戳
具有精度。两者的精度都只有毫秒。一旦你将
日期
带入游戏,你将失去精准度


因此,只需保留
时间戳
,并用
getTime
抓住它的毫秒,做任何你需要做的事情,但要确保你抓住它。

时间戳
具有精确性。两者的精度都只有毫秒。一旦你将
日期
带入游戏,你将失去精准度

因此,只需保留
时间戳
,并用
getTime
抓住它的毫秒,做任何你需要做的事情,但要确保你抓住它。

tl;博士 这两个麻烦的
Date
Timestamp
类现在都被
java.time.Instant
取代

Instant.now() 
       .toString()
2018-04-04T21:33:37.889228Z

java.time 和都是正确的,您已经遇到了这些类中设计的限制

而且,这些类很麻烦、令人困惑并且有缺陷。它们已被java.time类取代。无需再次使用
java.util.Date
java.sql.Timestamp

java.util.Date
类表示UTC时间轴上的一个时刻,分辨率为。该类现在也被替换为,但具有更高的分辨率

特别是在Java8中,捕获当前时刻被限制为毫秒,尽管
Instant
类能够保持纳秒。在Java9和更高版本中,的新实现允许以更高的分辨率捕获当前时刻,尽管受到主机操作系统和硬件能力的限制。在macOS Sierra上的OracleJDK9.0.4中,我看到的是微秒

瞬间。现在()。toString():2018-04-04T21:33:37.889228Z

从JDBC 4.2及更高版本开始,
java.sql.Timestamp
类也被
Instant
取代。现在,您可以直接交换java.time类,而不必考虑java.sql类型

myPreparedStatement.setObject( … , instant ) ;
……还有

Instant instant = myResultSet.getObject( … , Instant.class ) ;

关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

该项目现已启动,建议迁移到类

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要
java.sql.*

从哪里获得java.time类

  • ,及以后
    • 内置的
    • 标准JavaAPI的一部分,带有捆绑实现
    • Java9添加了一些次要功能和修复
    • 大部分java.time功能都在中向后移植到Java6和Java7
    • 更高版本的Android捆绑包实现了java.time类
    • 对于早期的Android(tl;dr 这两个麻烦的
      Date
      Timestamp
      类现在都被
      java.time.Instant
      取代

      Instant.now() 
             .toString()
      
      2018-04-04T21:33:37.889228Z

      java.time 和都是正确的,您已经遇到了这些类中设计的限制

      而且,这些类很麻烦、容易混淆并且有缺陷。它们已经被java.time类所取代。无需再次使用
      java.util.Date
      java.sql.Timestamp

      java.util.Date
      类表示UTC时间轴上的一个时刻,分辨率为。该类现在被替换为,也是中的一个时刻,但分辨率更高

      特别是在Java 8中,捕获当前时刻被限制为毫秒,尽管
      Instant
      类能够保持纳秒。在Java 9和更高版本中,的新实现允许以更高的分辨率捕获当前时刻,尽管受主机操作系统和硬件的能力限制。在Oracle JDK 9.0.4中在macOS Sierra上,我看到的是微秒

      瞬间。现在()。toString():2018-04-04T21:33:37.889228Z

      从JDBC 4.2及更高版本开始,
      java.sql.Timestamp
      类也被
      Instant
      取代。现在您可以直接交换java.time类,而不用考虑java.sql类型

      myPreparedStatement.setObject( … , instant ) ;
      
      ……还有

      Instant instant = myResultSet.getObject( … , Instant.class ) ;
      

      关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,如,&

      该项目现已启动,建议迁移到类

      要了解更多信息,请参阅.和搜索堆栈溢出以获取许多示例和解释。规范为

      您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要
      java.sql.*
      classes

      从哪里获得java.time类

      • ,及以后
        • 内置的
        • 标准JavaAPI的一部分,带有捆绑实现
        • Java9添加了一些次要功能和修复
        • 大部分java.time功能都在中向后移植到Java6和Java7
        • 更高版本的Android捆绑包实现了java.time类
        • 对于早期的Android(如果必须保持微秒精度,