将语言环境日期转换为mysql日期时间格式

时间:2018-01-30 17:03:49

标签: java date data-conversion

我从结果中得到以下字符串。如何在java中智能地将其转换为mysql日期时间格式?

Montag, 09. April 2018, 11:00 Uhr

提前致谢

2 个答案:

答案 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)

TL;博士

将对象发送到数据库,而不是字符串。

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.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和& SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore