【发布时间】:2020-04-22 06:55:39
【问题描述】:
我有一个返回日期时间列的 Oracle 数据库查询。在 java 方法中,将列转换为字符串。 部分代码如下所示:
ResultSet rs;
HashMap<String, String> hm=new HashMap<String, String> ();
hm.put("SchEndDate2", rs1.getString("END_DT_TM_GMT"));
当我在调试器中查看字符串值时,它看起来像这样:"2019-07-04 11:00:00.0" 我需要将此字符串转换为以下日期时间格式:“yyyy-MM-dd'T'HH:mm”
我尝试使用此 SimpleDateFormat 来完成此操作,但是当我将字符串转换为格式时,它会返回东部夏令时的日期时间,而不是 GMT。 通过转换后的值是这样的:"Thu Jul 04 07:00:00 EDT 2019" 这是我用来将字符串转换为 DateTime 的代码。
EndDate=map.get("SchEndDate2");
//EndDate : **"2019-07-04 11:00:00.0"**
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
formatter.setTimeZone(TimeZone.getTimeZone("GMT"));
Date databaseDateTime = formatter.parse(EndDate);
//databaseDateTime: **"Thu Jul 04 07:00:00 EDT 2019"**
为什么格式不正确,时区设置不正确?
【问题讨论】:
-
我建议你不要使用
SimpleDateFormat、TimeZone和Date。这些类设计不佳且过时已久,尤其是第一个类是出了名的麻烦。相反,只需使用来自java.time, the modern Java date and time API 的LocalDateTime。 -
嗯?它已经是
java.sql.Timestamp。不要将其转换为字符串,也不要将其转换回来。使用rs.getTimestamp()。