java simple date pattern TO oracle sql date pattern
我有以下网络应用程序:
用户可以输入java简单日期格式模式和日期(当然与java简单日期格式模式匹配),我想将这些日期存储在oracle数据库中。
因此,我需要将java简单日期格式模式转换为oracle模式。
例如:
- "dd-MM-yyyy HH:mm:ss"变为"DD-MM-YYYY HH24:MI:SS"
- "dd-MM-yy HH:mm:ss"变为"DD-MM-YY HH24:MI:SS"
- "dd-MM-yy HH:mm"变为"DD-MM-YY HH24:MI"
等等。
只需拥有一个SimpleDateFormat而不是以下代码,我想将所有或至少一大堆SimpleDateFormatPatterns转换为Oracle模式:
1 2 | SimpleDateFormat sFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss"); String sqlSnippet ="TO_DATE('" + sFormat.format(date) +"','DD-MM-YYYY HH24:MI:SS')"; |
是否有一个库或者只是一个映射列表来执行此操作?
谢谢。
编辑:
我需要手动构建SQL,因为用户定义了条件,比较了用户界面中的运算符和连接。
最后我有这样的事情
1 | AND col2 > TO_DATE('26-09-2012','DD-MM-YYYY') |
Therefore I need to translate the java simple date format pattern into the oracle pattern
不,你没有。您应该使用
避免使用字符串转换,除非它们基本上是您尝试执行的操作的一部分(例如,在UI中显示日期/时间)。要简单地将信息从您的应用程序传输到您的数据库,反之亦然,您应该尽可能减少所需的转换次数。
Jon Skeet的回答是正确的,但现在引用一些遗留类已经过时了。
智能对象,而不是哑弦
您反对表示您的日期时间值。从JDBC 4.2及更高版本开始,您可以直接与数据库交换java.time对象。
您的输入缺少任何时区指示或从UTC偏移。因此,在Java中将其解析为
1 2 3 | DateTimeFormatter f1 = DateTimeFormatter.ofPattern("dd-MM-uuuu HH:mm:ss" ) ; DateTimeFormatter f2 = DateTimeFormatter.ofPattern("dd-MM-uu HH:mm:ss" ) ; DateTimeFormatter f3 = DateTimeFormatter.ofPattern("dd-MM-uu HH:mm" ) ; |
按输入字符串的长度选择格式化程序。
1 | LocalDateTime ldt = LocalDateTime.parse( myInputString , f2 ) ; |
I need to build the SQL by hand as the user defines the criteria, compare operators and joins in the user interface. In the end I have something like this
String sqlSnippet ="TO_DATE('" + sFormat.format(date) +"','DD-MM-YYYY HH24:MI:SS')";
不,不要将日期时间值作为文本嵌入到SQL字符串中。而是使用
1 |
在运行时将要滑动的对象传递给该占位符。
1 | myPreparedStatement.setObject( … , ldt ) ; |
恢复:
1 | LocalDateTime ldt = myResultSet.getObject( … ; LocalDateTime.class ) ; |
关于java.time
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧遗留日期时间类,例如
现在处于维护模式的Joda-Time项目建议迁移到java.time类。
要了解更多信息,请参阅Oracle教程。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
您可以直接与数据库交换java.time对象。使用符合JDBC 4.2或更高版本的JDBC驱动程序。不需要字符串,不需要
从哪里获取java.time类?
-
Java SE 8,Java SE 9及更高版本
- 内置。
- 带有捆绑实现的标准Java API的一部分。
- Java 9增加了一些小功能和修复。
-
Java SE 6和Java SE 7
- 许多java.time功能都被反向移植到Java 6& 7在ThreeTen-Backport。
-
Android的
- 更高版本的Android捆绑java.time类的实现。
- 对于早期的Android(<26),ThreeTenABP项目采用ThreeTen-Backport(如上所述)。请参见如何使用ThreeTenABP ....
ThreeTen-Extra项目使用其他类扩展了java.time。该项目是未来可能添加到java.time的试验场。您可以在这里找到一些有用的类,例如