Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 乔达:时间到了,解析不起作用_Java_Jodatime - Fatal编程技术网

Java 乔达:时间到了,解析不起作用

Java 乔达:时间到了,解析不起作用,java,jodatime,Java,Jodatime,我有这个代码,不知道为什么它不起作用 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(dateT

我有这个代码,不知道为什么它不起作用

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)

插入
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-yyy-hh:mm:ss”)


kk-->hh

这有效。试试这个

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));
(汤姆的建议值得称赞)

这很可能是
Locale
问题:如果默认的
Locale
无法识别“Sun”和“Apr”,则
DateTimeFormatter
将抛出
IllegalArgumentException

您可以使用以下方法解决此问题:

说明:

@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"));
}

小时(0~23)数字0k时钟小时(1~24)数字24这是怎样的正确答案?他们为什么要使用小写字母“h”(12小时时钟)。为什么这样做而不是OP的代码?Tom在上面的评论更有可能有所帮助。请注意您的
语言环境,以及它是否支持“Sun”和“Apr”。这应该如何解决OPs问题?您正在使用相同的代码解析日期。这运行错误,我使用的是inteelij IDEA,它是maven项目。Joda time import在dependencies中添加了。有什么线索吗?我把Tom的评论变成了回答谢谢。我要去看看,告诉你们这对我是否有效。
@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"));
}