Joda日期格式化程序

Hub*_*cki 2 java datetime date jodatime

有谁知道如何解析的日期,例如:Mon Aug 04 16:07:00 CEST 2014dd/MM/YYYY HH:MM:SS使用DateTime格式化从乔达.我试过了:

final DateTimeFormatter sdf = DateTimeFormat.forPattern(DATE_FORMAT);
DateTime lastDateOnline = sdf.parseDateTime(lastCommunicationToDisplay.getDateOnLine().toString());
return lastDateOnline.toString();
Run Code Online (Sandbox Code Playgroud)

DATE_FORMAT = dd/MM/YYYY HH:MM:SSlastCommunicationToDisplay.getDateOnLine().toString() = Mon Aug 04 16:07:00 CEST 2014

我找不到关于该图书馆的明确解释.我被要求使用它,而不是SimpleDateFormat因为它不是线程安全的.

Cri*_*ina 8

解决方案

如果您只需要将LocalDate转换为符合模式的字符串:"dd/MM/YYYY HH:mm:ss",那么您可以使用LocalDate上的重载toString()方法以更简单的方式执行此操作:

a)直接接收格式字符串的那个:

LocalDate date = lastCommunicationToDisplay.getDateOnLine();
System.out.println(date.toString("dd/MM/YYYY HH:mm:ss"));
Run Code Online (Sandbox Code Playgroud)

b)接收使用上述字符串初始化的DateTimeFormatter的那个:

DateTimeFormatter dtf = DateTimeFormat.forPattern("dd/MM/YYYY HH:mm:ss");
LocalDate date = lastCommunicationToDisplay.getDateOnLine();
System.out.println(date.toString(dtf));
Run Code Online (Sandbox Code Playgroud)

您的代码出了什么问题

您使用的格式字符串与您作为输入发送的日期字符串不兼容.您使用DateTimeFormatter的方式用于将该格式的字符串解析为LocalDates,而不是相反.

如果您的输入字符串如下所示,则格式是合适的:04/08/2014 22:44:33

由于您的外观不同,因此格式的以下值是兼容的(前提是您的时区始终为CEST):

DATE_FORMAT = "E MMM dd HH:mm:ss 'CEST' YYYY";
Run Code Online (Sandbox Code Playgroud)

所以整个代码应如下所示:

String dateString = "Mon Aug 04 16:07:00 CEST 2014";
DateTimeFormatter dtf = DateTimeFormat.forPattern("E MMM dd HH:mm:ss 'CEST' YYYY");
LocalDate date = dtf.parseLocalDate(dateString);
System.out.println(date.toString("MM/dd/yyyy")); // or use toString(DateTimeFormatter) and use your pattern with a small adjusment here (dd/MM/YYYY HH:mm:ss)
Run Code Online (Sandbox Code Playgroud)

但是,我建议前两个建议之一.