Hub*_*cki 2 java datetime date jodatime
有谁知道如何解析的日期,例如:Mon Aug 04 16:07:00 CEST 2014
对dd/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:SS 和
lastCommunicationToDisplay.getDateOnLine().toString() = Mon Aug 04 16:07:00 CEST 2014
我找不到关于该图书馆的明确解释.我被要求使用它,而不是SimpleDateFormat因为它不是线程安全的.
解决方案
如果您只需要将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)
但是,我建议前两个建议之一.