我有json字段
{"dateTime" : "2018-06-02T15:49:23"}
现在我需要在postgres存储过程中使用此字段作为输入参数。在SP中,输入字段类型是时间戳,因为我需要在sql时间戳中转换此dateTime而不使用' T'介于两者之间(仅2018-06-02 15:49:23)。 关于如何用Java实现它的任何建议都非常感谢。
答案 0 :(得分:0)
你可以选择它:
t=# select ('{"dateTime" : "2018-06-02T15:49:23"}'::json->>'dateTime')::timestamp;
timestamp
---------------------
2018-06-02 15:49:23
(1 row)
答案 1 :(得分:0)
import org.json.*;
... let's obj is your var that contain your JSON with datetime
String dateTime= obj.getString("dateTime");
DateTimeFormatter f = DateTimeFormat.forPattern("yyyy-MM-ddTHH:mm:ss");
DateTime dateTime = f.parseDateTime(dateTime);
Timestamp ts = new Timestamp(dt.getMillis()); /*if you need in milliseconds*/
答案 2 :(得分:0)
我建议您将字符串解析为Java中的T
,而不是仅删除LocalDateTime
。 one-arg LocalDateTime.parse
方法可以做到:
LocalDateTime dateTime = LocalDateTime.parse("2018-06-02T15:49:23");
然后,您可以将LocalDateTime
传递给期望时间戳的存储过程。
CallableStatement cs = yourConnection.prepareCall("{call your_stored_procedure(?)}");
cs.setObject(1, dateTime);
在过去,我们会在这里使用java.sql.Timestamp
。那个班级现在已经过时了。对于Java 8和JDBC 4.2或更高版本,我们更喜欢使用LocalDateTime
或Instant
。