Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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
将SQL日期转换为Java.util.date_Java_Date_Format_Java.util.date - Fatal编程技术网

将SQL日期转换为Java.util.date

将SQL日期转换为Java.util.date,java,date,format,java.util.date,Java,Date,Format,Java.util.date,我的要求是将dueDate字段作为日期返回给呼叫服务 后端代码返回的日期为mm/dd/yy。当我将这些字段映射到Java代码时,我的对象包含类型为Java.sql.date的日期字段 对象中定义的字段是(注意,它是伪字段): 打印对象时,Date字段的格式如下: dueDate=Thu Oct 25 20:00:00 EDT 2018 dueDate=Thu Aug 02 20:00:00 EDT 2018 当我从后端查询时,它会显示正确的格式(mm/dd/yy),我应该将其返回到调用服务 检

我的要求是将
dueDate
字段作为日期返回给呼叫服务

后端代码返回的日期为
mm/dd/yy
。当我将这些字段映射到Java代码时,我的对象包含类型为
Java.sql.date
的日期字段

对象中定义的字段是(注意,它是伪字段):

打印对象时,
Date
字段的格式如下:

dueDate=Thu Oct 25 20:00:00 EDT 2018
dueDate=Thu Aug 02 20:00:00 EDT 2018
当我从后端查询时,它会显示正确的格式(mm/dd/yy),我应该将其返回到调用服务

检查这个

//converting java.util.Date to java.sql.Date in Java
java.sql.Date sqlDate = new java.sql.Date(now.getTime());
System.out.println("Converted value of java.sql.Date : " + sqlDate);

//converting java.sql.Date to java.util.Date back
java.util.Date utilDate = new java.util.Date(sqlDate.getTime());
System.out.println("Converted value of java.util.Date : " + utilDate);
通过此链接:

然后,您可以使用SimpleDataFormat将日期格式化为您喜欢的格式:

DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String strdate = simpleDateFormat.format(myJavaDate);
System.out.println(strdate);
检查这个

//converting java.util.Date to java.sql.Date in Java
java.sql.Date sqlDate = new java.sql.Date(now.getTime());
System.out.println("Converted value of java.sql.Date : " + sqlDate);

//converting java.sql.Date to java.util.Date back
java.util.Date utilDate = new java.util.Date(sqlDate.getTime());
System.out.println("Converted value of java.util.Date : " + utilDate);
通过此链接:

然后,您可以使用SimpleDataFormat将日期格式化为您喜欢的格式:

DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String strdate = simpleDateFormat.format(myJavaDate);
System.out.println(strdate);
java.util.Date
vs
java.sql.Date
您的输出看起来来自
java.util.Date
而不是
java.sql.Date

不幸的是,这两者很容易混淆。除了
Date
名称之外,
sql
在技术上是另一个
util
one的子类。注意:这是一个黑客,而且是一个糟糕的黑客。文档警告我们假装两者没有继承关系。但编译器并不知道这一点

下面是一些示例代码,显示了这两个类以及它们各自的
toString
方法的不同行为

// Legacy classes
System.out.println( "java.sql.Date: " + new java.sql.Date( Instant.now().toEpochMilli() ) ) ;
System.out.println( "java.util.Date: " + new java.util.Date() ) ;
看到这个了吗

java.sql.Date:2018-07-31

java.util.Date:2018年7月31日星期二22:44:14 GMT

您可以看到
java.sql.Date::toString
方法使用sql环境中使用的较短的YYYY-MM-DD格式。顺便说一句,这种格式也恰好符合标准

相反,您报告的输出与
java.util.Date::toString
的输出相匹配

java.time 这个问题没有实际意义。您使用的是多年前被java.time类取代的糟糕的旧日期时间类

  • java.sql.Date
    替换为
    java.time.LocalDate
    ,这是一个只有日期的值,没有一天中的时间,也没有时区。(仅供参考,
    java.sql.Date
    假装没有时间或时区,但实际上两者都有,这是
    java.util.Date
    的一个笨拙的子类)
  • java.util.Date
    替换为
    java.time.Instant
    。两者都代表UTC中的一个时刻,尽管
    Instant
    的分辨率更高,为纳秒,而不是毫秒。(仅供参考,
    java.util.Date
    实际上有一个深埋的时区,没有getter/setter方法无法访问,但用于
    equals
    等。这些遗留类中的许多糟糕设计决策之一。)
下面是一些代码,与上面看到的代码相对应

// Modern classes
System.out.println( "LocalDate.now(): " + LocalDate.now() ;
System.out.println( "Instant.now(): " + Instant.now() ) ;
System.out.println( "ZonedDateTime.now( … ): " + ZonedDateTime.now( ZoneId.of( "Africa/Tunis" ) ) ) ;
看到这个了吗

LocalDate.now():2018-07-31

瞬间现在():2018-07-31T22:57:27.763Z

分区日期时间现在(…):2018-07-31T23:57:27.904+01:00[非洲/突尼斯]


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

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

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

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

从哪里获得java.time类

  • 然后
    • 内置的
    • 标准JavaAPI的一部分,带有捆绑实现
    • Java9添加了一些次要功能和修复
    • 大部分java.time功能都在中向后移植到Java6和Java7
    • 更高版本的Android捆绑包实现了java.time类
    • 对于早期的Android(
      java.util.Date
      vs
      java.sql.Date
      您的输出看起来来自
      java.util.Date
      而不是
      java.sql.Date

      不幸的是,这两者很容易混淆。除了
      Date
      名称之外,
      sql
      从技术上讲,一个是另一个
      util
      one的子类。注意:这是一个黑客行为,而且是一个糟糕的黑客行为。文档警告我们假装这两个没有继承关系。但编译器不知道这一点

      下面是一些示例代码,显示了这两个类以及它们各自的
      toString
      方法的不同行为

      // Legacy classes
      System.out.println( "java.sql.Date: " + new java.sql.Date( Instant.now().toEpochMilli() ) ) ;
      System.out.println( "java.util.Date: " + new java.util.Date() ) ;
      
      看到这个了吗

      java.sql.Date:2018-07-31

      java.util.Date:2018年7月31日星期二22:44:14 GMT

      您可以看到
      java.sql.Date::toString
      方法使用sql环境中使用的较短的YYYY-MM-DD格式。顺便说一下,该格式也符合标准

      相反,您报告的输出与
      java.util.Date::toString
      的输出相匹配

      java.time 这个问题是没有意义的。您使用的是可怕的旧日期时间类,多年前被java.time类取代

      • java.sql.Date
        替换为
        java.time.LocalDate
        ,这是一个只有日期的值,没有一天中的时间,也没有时区。(仅供参考,
        java.sql.Date
        假装没有一天中的时间或时区,但实际上两者都有,这是
        java.util.Date
        的一个笨拙的子类)
      • java.util.Date
        替换为
        java.time.Instant
        。两者都代表UTC中的一个时刻,尽管
        Instant
        的分辨率更高,为纳秒,而不是毫秒。(仅供参考,
        java.util.Date
        实际上有一个深埋的时区,没有getter/setter方法无法访问,但用于
        equals
        等。这些遗留类中的许多糟糕设计决策之一。)
      下面是一些代码,与上面看到的代码相对应

      // Modern classes
      System.out.println( "LocalDate.now(): " + LocalDate.now() ;
      System.out.println( "Instant.now(): " + Instant.now() ) ;
      System.out.println( "ZonedDateTime.now( … ): " + ZonedDateTime.now( ZoneId.of( "Africa/Tunis" ) ) ) ;
      
      看到这个了吗

      LocalDate.n