Joda日期格式化程序

时间:2014-08-04 15:57:23

标签: java date datetime jodatime

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

final DateTimeFormatter sdf = DateTimeFormat.forPattern(DATE_FORMAT);
DateTime lastDateOnline = sdf.parseDateTime(lastCommunicationToDisplay.getDateOnLine().toString());
return lastDateOnline.toString();

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

我找不到关于该图书馆的明确解释。我已经请求使用它代替SimpleDateFormat,因为它不是线程安全的。

1 个答案:

答案 0 :(得分:7)

<强>解决方案

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

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

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

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

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

您的代码出了什么问题

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

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

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

DATE_FORMAT = "E MMM dd HH:mm:ss 'CEST' YYYY";

因此整个代码应如下所示:

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)

但是,我建议前两个建议中的一个。