Date toString()方法返回不同的字符串

时间:2019-03-25 18:04:57

标签: java spring-mvc

我正在使用“ JdbcTemplate” spring bean从数据库查询数据。返回的对象包含一个数据字段。我面临的问题是当我控制台打印returnedObject.getDate().toString()时返回“ 2017-08-04”,但是当我执行new Date().toString()时它将返回Mon Mar 25 17:36:32 GMT 2019。我已经读过Java Date类中不包含任何格式,并且为了格式化任何Date,我们使用SimpleDateFormat类。所以我的问题是Date对象中的哪个参数导致它以不同的格式打印以及如何更改其行为?

4 个答案:

答案 0 :(得分:1)

JDBCTemplate返回一个扩展了java.sql.Date的{​​{1}}实例。 JavaDocs of that toString()实现说明了使用的日期格式:

  

以日期转义格式yyyy-mm-dd格式化日期。

toString() implementation of java.util.Date使用更长的日期时间格式:

  

将此Date对象转换为以下形式的字符串:   java.util.Date

日期字段的类型可以为dow mon dd hh:mm:ss zzz yyyy,并且您仍可以为该字段分配Object或任何子类。变量的运行时类通过动态方法分派(即调用java.sql.Date实现来确定行为)。

如果要将子类转换为“普通” toString()实例,则可以查看here。请注意,SQL java.util.Date中始终会省略时间部分。如果需要这些信息,则应改用DATE

答案 1 :(得分:1)

  

当我进行控制台打印时,返回returnObject.getDate()。toString()   “ 2017-08-04”,但是当我执行新的Date()。toString()时,它将返回Mon   2019年3月25日17:36:32 GMT

那很简单。

returnedObject.getDate()代码返回java.sql.Date类型的对象,而第二种情况下的Date类很可能是java.util.Date

根据java.sql.Date的{​​{3}},其toString方法返回yyyy-mm-dd格式的字符串。

根据java.util.Date的{​​{3}},其toString方法返回dow mon dd hh:mm:ss zzz yyyy格式的字符串。

答案 2 :(得分:0)

尽管Date类旨在反映协调世界时(UTC),但根据Java虚拟机的宿主环境,根据date类的Java文档,它可能不能完全反映协调世界时。我认为这意味着它正在查看系统的日期格式,而UTC格式附带了SQL查询。没有日期参数可以更改格式。您需要像通过日期格式化程序所说的那样应用它。请看一下DateFormater类:https://docs.oracle.com/javase/7/docs/api/java/text/DateFormat.html 特别是格式化方法。

答案 3 :(得分:0)

java.sql.Date扩展了java.util.Date。自1970年以来,您可以使用getTime()获得两种日期,以毫秒为单位,并且setTime(long time)可用于创建相同的类型,因此您可以使用任意格式的字符串。

但是,请注意,Java的旧日期类是垃圾(不是线程安全的,不可变的,并且命名不正确(它们是时间戳而不是日期)。

有些第三方库比较好。看一下java.util.time这是新方法。