我从结果中得到以下字符串。如何在java中智能地将其转换为mysql日期时间格式?
Montag, 09. April 2018, 11:00 Uhr
提前致谢
答案 0 :(得分:2)
你可以有效地做到这一点,但我不知道这是不是一个好主意。
无论如何,这是技术上的工作:
String s = "Montag, 09. April 2018, 11:00 Uhr";
DateTimeFormatter formatter = DateTimeFormatter
.ofPattern("EEEE, dd. MMMM yyyy, HH:mm 'Uhr'", Locale.GERMANY);
// Parse with the German format
LocalDateTime dateTime = LocalDateTime.parse(s, formatter); // Using Java 8 libraries
// Format with the MySQL format (Well, actually ISO)
final DateTimeFormatter formatterMysql = DateTimeFormatter.ISO_DATE_TIME;
System.out.println(formatterMysql.format(dateTime).replace("T", " "));
这将打印出来:
2018-04-09 11:00:00
MySQL应该理解这一点。
答案 1 :(得分:2)
将对象发送到数据库,而不是字符串。
myPreparedStatement.setObject( // JDBC 4.2 and later allows direct exchange of java.time objects with a database.
… ,
DateTimeFormatter.ofPattern( // Define a formatter based on a specific pattern.
"EEEE, dd. MMMM yyyy, HH:mm 'Uhr'" , // Pattern to match our input text.
Locale.GERMANY // Locale specifies human language used to parse the name of day, name of month, etc.
).parse( "Montag, 09. April 2018, 11:00 Uhr" ) // Generate a `ZonedDateTime` object.
)
首先,请阅读gil.fernandes的correct Answer。
您的短语“mysql日期时间格式”建议使用字符串。您不应该将数据库的日期时间值作为文本进行交换。我们有课程。
将输入字符串解析为LocalDateTime
对象,如答案所示。
DateTimeFormatter f =
DateTimeFormatter.ofPattern(
"EEEE, dd. MMMM yyyy, HH:mm 'Uhr'" ,
Locale.GERMANY
)
;
LocalDateTime ldt =
LocalDateTime.parse(
"Montag, 09. April 2018, 11:00 Uhr" ,
f
)
;
使用JDBC 4.2或更高版本,将该对象发送到您的数据库。请注意,LocalDateTime
只应发送到类似SQL标准TIMESTAMP WITHOUT TIME ZONE
的列。
myPreparedStatement.setObject( … , ldt ) ;
检索:
LocalDateTime ldt = myResultSet.getObject( … , LocalDateTime.class ) ;
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。