【发布时间】:2014-11-25 16:13:00
【问题描述】:
以下代码将日期格式从 "yyyy-MM-dd'T'HH:mm:ss" 转换为 "MM/dd/yyyy" 。
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
public class TestDate {
public static void main(String[] args) {
DateTimeFormatter parser = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss");
DateTime dateTime = parser.parseDateTime("2014-05-19T23:59:59");
DateTimeFormatter formatter = DateTimeFormat.forPattern("MM/dd/yyyy");
System.out.println(formatter.print(dateTime)+"\n");
dateTime = parser.parseDateTime("2014-06-09T03:00:23.67");
formatter = DateTimeFormat.forPattern("MM/dd/yyyy");
System.out.println(formatter.print(dateTime));
}
"2014-06-09T03:00:23.67" 抛出异常:
Exception in thread "main" java.lang.IllegalArgumentException: Invalid format: "2014-06-09T03:00:23.67" is malformed at ".67"
at org.joda.time.format.DateTimeFormatter.parseDateTime(DateTimeFormatter.java:899)
at TestDate.main(TestDate.java:16)
我还需要能够满足其他可能性,例如:
2014-05-27T03:00:32.613
我只需要日期的"MM/dd/yyyy" 部分,之后的所有内容都可以忽略。我是否需要预测Using Joda Date & Time API to parse multiple formats 中解释的每种日期格式
或者可以使用通配符忽略特定模式之后的所有内容。类似的东西:
DateTimeFormatter parser = DateTimeFormat.forPattern("yyyy-MM-dd%");
或者我可以解析字符串并在日期时间的“T”部分进行拆分,只使用出现在“T”之前的值,虽然这看起来不干净......
或者有其他方法吗?
更新:
由于不需要时间,所以不用:
String strDate = "2014-05-19T23:59:59";
DateTime dateTime = parser.parseDateTime(strDate);
将使用:
String strDate = "2014-05-19T23:59:59";
DateTime dateTime = parser.parseDateTime(strDate.substring(0, 10));
这将只解析字符串的2014-05-19 部分,这将满足多种时间格式。
【问题讨论】:
-
你查看过 Joda ISODateTimeFormat 吗?
-
@OldCurmudgeon ISODateTimeFormat 不接受多种日期格式或允许基于多种格式格式化日期?
-
@jalopaba 谢谢。 “@krtek:好吧,在您提到的所有情况下,substring(0, 10) 都将匹配 2009-05-15 ;-)” 写在您链接问题的 cmets 之一中 - 与我正在使用的解决方案相同
标签: java date datetime jodatime