我想将mm / dd / yy格式的String值转换为YYYY-MM-DD Date。怎么做这个转换?
输入参数为: 03/01/18
将String转换为Date的代码如下所示
public static Date stringToDateLinen(String dateVlaue) {
Date date = null;
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
try {
date = formatter.parse(dateVlaue);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
尝试使用此方法进行转换时,会显示以下错误
java.text.ParseException: Unparseable date: "03/01/18"
答案 0 :(得分:0)
你写错了。事实上,对于您想要转换的日期,您需要编写
5
答案 1 :(得分:0)
您传递给SimpleDateFormat的格式是(" yyyy-MM-dd"),它要求日期为2013-03-01,因此错误。
您需要提供正确传递输入的格式,如下所示
public static Date stringToDateLinen(String dateVlaue) {
Date date = null;
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yy");
try {
date = formatter.parse(dateVlaue);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
答案 2 :(得分:0)
正如您所说的输入格式不同,首先将String转换为有效的Date对象。获得Date对象后,您可以根据需要将其格式化为不同的类型check。
转换为日期,
SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yy");
date = formatter.parse(dateVlaue);
以其他格式打印出来
SimpleDateFormat formatter1 = new SimpleDateFormat("yyyy-MM-dd");
dateString = formatter1.format(date)
答案 3 :(得分:0)
上述问题的解决方案
该方法在下面给出了
public static String stringToDateLinen(String dateVlaue) {
Date date = null;
SimpleDateFormat formatter = new SimpleDateFormat("dd/mm/yy");
String dateString = null;
try {
// convert to Date Format From "dd/mm/yy" to Date
date = formatter.parse(dateVlaue);
// from the Converted date to the required format eg : "yyyy-MM-dd"
SimpleDateFormat formatter1 = new SimpleDateFormat("yyyy-MM-dd");
dateString = formatter1.format(date);
} catch (ParseException e) {
e.printStackTrace();
}
return dateString;
}
答案 4 :(得分:0)
编辑:您的问题是“字符串值格式为mm / dd / yy”,但我从您的评论中了解到您的意思是“我的输入格式为dd / mm / yy as string “,所以我相应地改变了下面代码中的格式模式字符串。否则,两种情况下的代码都是相同的。
public static Optional<LocalDate> stringToDateLinen(String dateValue) {
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("dd/MM/yy");
try {
return Optional.of(LocalDate.parse(dateValue, dateFormatter));
} catch (DateTimeParseException dtpe) {
return Optional.empty();
}
}
试一试:
stringToDateLinen("03/01/18")
.ifPresentOrElse(System.out::println,
() -> System.out.println("Could not parse"));
输出:
2018年1月3日
我建议你远离SimpleDateFormat
。它已经过时了,而且非常麻烦。 Date
就像过时一样。而是使用现代Java日期和时间API LocalDate
中的DateTimeFormatter
和java.time
。与它合作真是太好了。 LocalDate
是一个没有时间的日期,所以这比Date
更好地满足您的要求,尽管它的名称是一个时间点。 LocalDate.toString()
生成您所希望的格式(尽管LocalDate
中没有格式)。
我的方法将你的2位数年份解释为2000年,即从2000年到2099年。请在决定这是你想要的之前三思而后行。
如果无法将字符串解析为有效日期,您希望发生什么?我担心返回null
是等待发生的NullPointerException
以及随后的调试会话以追踪根本原因。您可以考虑让DateTimeParseException
从您的方法中抛出(只是在Javadoc中声明),因此根本原因在堆栈跟踪中。如果不应该发生这种情况,甚至可以抛出AssertionError
。在我的代码中,我返回一个Optional
,它清楚地向调用者发出信号,表明可能没有结果,(我希望)阻止任何NullPointerException
。在调用方法的代码中,我使用的是Java 9中引入的ifPresentOrElse
方法。如果还没有使用Java 9,请使用ifPresent
和/或阅读有关在其他地方使用Optional
的更多信息。
其他答案是正确的:用于解析的格式模式字符串需要匹配输入(而不是输出)。抛出ParseException
因为格式模式包含连字符和输入斜杠。你得到例外是好事,因为另一个问题是年,月和日的顺序不匹配,一年中的数字也不匹配。
java.time
。