簡體   English   中英

Joda時間,解析不起作用

[英]Joda Time, parse is not working

我有這個代碼,不知道為什么它不起作用

String dateTime = "Sun, 18 Apr 2004 02:32:43";
// Format for input
org.joda.time.format.DateTimeFormatter dtf = DateTimeFormat.forPattern("EEE, dd MMM yyyy kk:mm:ss");
// Parsing the date
DateTime jodatime = dtf.parseDateTime(dateTime);
// Format for output
org.joda.time.format.DateTimeFormatter dtfOut = DateTimeFormat.forPattern("dd MMM yyyy kk:mm:ss");
// Printing the date

我得到的錯誤

Exception in thread "main" java.lang.IllegalArgumentException: Invalid format: "Sun, 18 Apr 2004 02:32:43"
    at org.joda.time.format.DateTimeFormatter.parseDateTime(DateTimeFormatter.java:945)
    at com.jbd.WeirdCutEmails.test(WeirdCutEmails.java:69)
    at com.jbd.WeirdCutEmails.main(WeirdCutEmails.java:108)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

(感謝湯姆的建議)

這很可能是Locale問題:如果您的默認Locale無法識別'Sun'和'Apr',那么DateTimeFormatter將拋出IllegalArgumentException

您可以使用withLocale(Locale locale)解決此問題:

DateTimeFormat.forPattern("EEE, dd MMM yyyy kk:mm:ss")
    .withLocale(Locale.ENGLISH)

插圖:

@Before
public void setUp() throws Exception {
    Locale.setDefault(new Locale("pt", "BR"));
}

@Test(expected = IllegalArgumentException.class)
public void testDefaultFormatterWontParseDifferentLocale() {
    //arrange
    DateTimeFormatter dtf = DateTimeFormat.forPattern("EEE, dd MMM yyyy kk:mm:ss");

    //act
    dtf.parseDateTime("Sun, 18 Apr 2004 02:32:43"); //won't parse as expecting a String in Portuguese Locale
}

@Test
public void testFormatterWithSuppliedLocale() {
    //arrange
    DateTimeFormatter dtf = DateTimeFormat
                                .forPattern("EEE, dd MMM yyyy kk:mm:ss")
                                .withLocale(Locale.ENGLISH);

    //act
    DateTime actualDateTime = dtf.parseDateTime("Sun, 18 Apr 2004 02:32:43");

    //assert
    Assert.assertEquals(new DateTime(2004,4,18,2,32,43), actualDateTime);
}

@After
public void tearDown() throws Exception {
    Locale.setDefault(new Locale("en","US"));
}

這是有效的。試試這個。

String dateTime = "Sun, 18 Apr 2004 02:32:43";
// Format for input
DateTimeFormatter dtf = DateTimeFormat.forPattern("EEE, dd MMM yyyy kk:mm:ss");

// Parsing the date
System.out.println(dtf.parseDateTime(dateTime));

// Format for output
DateTimeFormatter dtfOut = DateTimeFormat.forPattern("EEE, dd MMM yyyy kk:mm:ss");

// Printing the date
System.out.println(dtfOut.parseDateTime(dateTime));

未知的org.joda.time.format.DateTimeFormatter dtf = DateTimeFormat.forPattern("EEE, dd MMM yyyy kk:mm:ss");

使用org.joda.time.format.DateTimeFormatter dtf = DateTimeFormat.forPattern("EEE, dd MMM yyyy hh:mm:ss");

kk - > hh

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM