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
,则此参数将变得可复制。它无法从一周中的某一天推断年份。日期必须有一年,因为它是从纪元开始的毫秒数。