Joda时间:格式无效

时间:2014-11-17 10:53:26

标签: java jodatime

我正在使用Joda API格式化当前时间(结果必须是格式为&#34的字符串; yyyy-MM-dd HH:mm:ss")。下面我提供了我的代码和错误消息:

DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
DateTime dt = new DateTime();
String datetime = dtf.parseDateTime(dt.toString()).toString();

错误讯息:

  

线程中的异常" AWT-EventQueue-0"   java.lang.IllegalArgumentException:格式无效:   " 2014-11-17T11:47:29.229 + 01:00"在" T11:47:29.229 + 01:00"     在   org.joda.time.format.DateTimeFormatter.parseDateTime(DateTimeFormatter.java:899)

2 个答案:

答案 0 :(得分:3)

默认的DateTime字符串表示需要不同的模式:

   DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'+01:00'");

如果要使用模式格式化日期,则需要使用print()方法:

   DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
   DateTime dt = new DateTime();
   String datetime = dtf.print(dt);

答案 1 :(得分:3)

如果要使用自定义格式转换为字符串,请执行

DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
DateTime dt = new DateTime();
String datetime = dtf.print(dt);

您目前在最后一行中所做的是

String defaultFormatted = dt.toString();
// this is what contains the "T11:47:29.229+01:00" part

DateTime dateTime = dtf.parseDateTime(defaultFormatted);
// we're back at the beginning, this is equivalent to your original "dt"

String defaultFormattedAgain = dateTime.toString();
// and this is the same as the initial string with T11:..

所以你要转换为&从字符串中多次但从未使用dtf来实际格式化字符串的外观。