Java:如何解析String to Date是否正确?

时间:2016-01-27 15:08:19

标签: java date parsing

我尝试从字符串中解析日期:

```{r, results='asis', message=FALSE, warning=FALSE}

pander(head(cars))

```

我得到的输出是:

String dateString = "Fr, 1. Jan";
DateFormat format = new SimpleDateFormat("EE, d. MMM");
Date date = null;
try {
    date = format.parse(dateString);
} catch (Exception e) {
    e.printStackTrace();
}
System.out.println(format.format(date));

为什么会发生这种情况,为什么它与输入的输出不一样?

3 个答案:

答案 0 :(得分:3)

你忘记了这一年。当你解析它时,你将在1970年进入(星期五将被忽略)。解析时,您将解析1970年1月1日星期四的日期。这应该有效:

    String dateString = "Fr, 1. Jan";
    DateFormat format = new SimpleDateFormat("EE, d. MMM");
    Date date = null;
    try {
        date = format.parse(dateString);
    } catch (Exception e) {
        e.printStackTrace();
    }
    date.setYear(new Date().getYear()); //alternativ: date.setYear(2016);

    System.out.println(date);
    System.out.println(format.format(date));

答案 1 :(得分:2)

“Do”是“Donnerstag”的前2个字母,“星期四”是德语。从您的姓氏“Baum”(德语为“树”)来判断,我猜这不是巧合。此外,1970-01-01是星期四,如果你没有指定年份,你会得到一个时代的开始。

日期格式“E”是作为单词的星期几 - 您指定的“E”越多,该单词的字母越多; “EE”会在德语区域设置中将“Thursday”渲染为“Do”,这可能是您的默认语言环境。

您的代码对我来说是爆炸式的,但是这个类似的代码会产生相同的输出:

String dateString = "Fri, 1. Jan";
DateFormat format = new SimpleDateFormat("EEE, d. MMM");
Date date = format.parse(dateString);
DateFormat format2 = new SimpleDateFormat("EE, d. MMM", Locale.GERMAN);
System.out.println(format2.format(date));

输出:

Do, 1. Jan

答案 2 :(得分:2)

Java中的Date始于01-01-1970。 1970年1月1日是星期四,所以它将这一天解析为星期四而不是星期五。您必须添加一年才能保证它是星期五。