Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.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_Date_Parsing - Fatal编程技术网

Java:如何正确解析到日期的字符串?

Java:如何正确解析到日期的字符串?,java,date,parsing,Java,Date,Parsing,我尝试从字符串中解析日期: 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(d

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

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));
我得到的结果是:

Do, 1. Jan
为什么会发生这种情况?为什么输出与输入不一样?

Do是“Donnerstag”的前两个字母,这是德语中“星期四”的意思。从你的姓“Baum”(德语中“树”的意思)判断,我猜这不是巧合。而且,1970-01-01是一个星期四,如果你不指定年份,你就得到了新纪元的开始

日期格式“E”是一个单词的一周中的某一天——您指定的“E”越多,该单词的字母就越多;在德语区域设置中,“EE”将“星期四”呈现为“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

Java中的
日期开始于
01-01-1970
。1970年1月1日是星期四,因此它将一天解析为星期四而不是星期五。你必须加上一年才能保证今天是星期五。

你忘记了年份。当你解析它时,你将得到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));

我认为一天的名字至少需要3个字母。也许它和你的时区有关,但也需要1个字母。Jan应该改变(特别是因为1月1日不是Donnerstag)。。。请尝试完整地打印日期,并告诉我们您得到了什么。仅供参考:如果您使用
Locale.GERMAN
作为第二个参数初始化
SimpleDataFormat
,则此参数将变得可复制。它无法从一周中的某一天推断年份。日期必须有一年,因为它是从纪元开始的毫秒数。