我正在使用“ 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
对象中的哪个参数导致它以不同的格式打印以及如何更改其行为?
答案 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这是新方法。