【问题标题】:How to convert "2019-08-07T14:00:00-0400" to SQL DATETIME format in Java?如何在 Java 中将“2019-08-07T14:00:00-0400”转换为 SQL DATETIME 格式?
【发布时间】:2019-08-20 05:27:34
【问题描述】:

我无法将 2019-08-07T14:00:00-0400 传递给 SQL Server 中的存储过程,该过程接受 DATETIME 中的参数。

那么在调用存储过程之前,如何在 Java 中将其转换为 YYYY-MM-DD HH:MM:SS.SSS 格式?

【问题讨论】:

  • 如果你想用 Java 转换它,为什么要标记 SQL Server?
  • I couldn't pass ... 你想做什么?你想传递一个字符串吗?发生了什么?查看实际代码将有助于我们了解您的问题。
  • 我想已经回答了here。请试试这个。
  • 我正在尝试将 Java 中的字符串 2019-08-07T14:00:00-0400 传递给存储过程,并将其转换为 121 样式。我标记了 sql server,因为我对 java 解决方案和 sql 解决方案都持开放态度。
  • 不要将日期时间值作为字符串传递。使用PreparedStatement 并将它们作为LocalDateTime 的实例传递

标签: java datetime datetime-parsing


【解决方案1】:

您可以使用SimpleDateFormatclass 参考访问here

SimpleDateFormat formatDate = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ssZ");
Date date = df.parse("2019-08-07T14:00:00-0400");

您将获得java.util.Date 对象作为回报,您可以使用该对象将其存储在数据库中。

【讨论】:

  • 不要使用java.util.Date - 您应该至少使用java.sql.Timestamp,但java.time.LocalDateTime 将是首选解决方案。
  • 请不要教年轻人使用早已过时且臭名昭著的麻烦SimpleDateFormat类。至少不是第一选择。而且不是没有任何保留。今天我们在java.time, the modern Java date and time API, 和它的DateTimeFormatter 中做得更好。
  • @OleV.V.您能分享您的想法并为指定格式提出更好的解决方案吗?
  • 我想根据@a_horse_with_no_name 的评论写一个答案,使用日期时间对象,例如LocalDateTime,而不是字符串;但我不太了解 SQL Server 及其 JDBC 驱动程序,无法确定 LocalDateTime 是完全正确的 Java 类型(听起来确实正确)。所以我不会。
【解决方案2】:

如果你想在 SQL 查询中转换它,你可以使用下面的查询。

 declare @abc nvarchar(19)='2019-08-07T14:00:00-0400'
 select CONVERT(DATETIME,convert(varchar, @abc,121))

【讨论】:

  • 在 SQL Server 中,从不使用charvarchar等等,没有长度!默认值因上下文而异,并可能导致意外且非常难以调试的错误。
猜你喜欢
  • 1970-01-01
  • 2020-07-17
  • 2020-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多