将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
vsjava.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
。两者都代表UTC中的一个时刻,尽管java.time.Instant
的分辨率更高,为纳秒,而不是毫秒。(仅供参考,Instant
实际上有一个深埋的时区,没有getter/setter方法无法访问,但用于java.util.Date
等。这些遗留类中的许多糟糕设计决策之一。)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(
vsjava.util.Date
您的输出看起来来自java.sql.Date
而不是java.util.Date
不幸的是,这两者很容易混淆。除了java.sql.Date
名称之外,Date
从技术上讲,一个是另一个sql
one的子类。注意:这是一个黑客行为,而且是一个糟糕的黑客行为。文档警告我们假装这两个没有继承关系。但编译器不知道这一点 下面是一些示例代码,显示了这两个类以及它们各自的util
方法的不同行为toString
看到这个了吗 java.sql.Date:2018-07-31 java.util.Date:2018年7月31日星期二22:44:14 GMT 您可以看到// 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() ) ;
方法使用sql环境中使用的较短的YYYY-MM-DD格式。顺便说一下,该格式也符合标准 相反,您报告的输出与java.sql.Date::toString
的输出相匹配 java.time 这个问题是没有意义的。您使用的是可怕的旧日期时间类,多年前被java.time类取代java.util.Date::toString
替换为java.sql.Date
,这是一个只有日期的值,没有一天中的时间,也没有时区。(仅供参考,java.time.LocalDate
假装没有一天中的时间或时区,但实际上两者都有,这是java.sql.Date
的一个笨拙的子类)java.util.Date
替换为java.util.Date
。两者都代表UTC中的一个时刻,尽管java.time.Instant
的分辨率更高,为纳秒,而不是毫秒。(仅供参考,Instant
实际上有一个深埋的时区,没有getter/setter方法无法访问,但用于java.util.Date
等。这些遗留类中的许多糟糕设计决策之一。)equals
看到这个了吗 LocalDate.n// 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" ) ) ) ;