我有以下程序,其中日期需要在美国格式日期转换,因为您可以看到我正在输入但是 他们仍然需要转换为现在没有发生的美国格式
请告知如何实现以下是我的代码
public class DateFormattingTest {
private static final SimpleDateFormat outputDate = new SimpleDateFormat(
"dd/MM/yyyy");
public static void main(String[] args) {
System.out.println ("03/20/2020-->:" + extractDate("03/20/2020") );
System.out.println ("2033-05-01-->:" + extractDate("2033-05-01") );
System.out.println ("08-05-34-->:" + extractDate("08-05-34") );
System.out.println ("30-DEC-2013 -->:" + extractDate("30-DEC-2013") );
System.out.println ("DEC-31-2013 -->:" + extractDate("DEC-31-2013") );
}
public static Date extractDate(String dateStr) {
String [] datePatternsUS = {"d-M-yy", "d-M-yyyy", "d/M/yy", "d/M/yyyy","dd-MM-yy", "yyyy-MM-dd", "dd-MMM-yy","dd-MMM-yyyy","dd-MM-yyyy",
"dd/MM/yy","dd/MMM/yy","dd/MMM/yyyy"};
Date date = null;
try {
date = DateUtils.parseDate(dateStr, datePatternsUS);
}
catch (Exception except) {
except.printStackTrace();
}
return date;
}
}
执行后我得到以下输出..这是不正确的请告知如何以美国格式更正
03/20/2020-->:Tue Aug 03 00:00:00 IST 2021
2033-05-01-->:Thu Nov 23 00:00:00 IST 2006
08-05-34-->:Mon May 08 00:00:00 IST 2034
30-DEC-2013 -->:Mon Dec 30 00:00:00 IST 2013
DEC-31-2013 -->:null
java.text.ParseException: Unable to parse the date: DEC-31-2013
答案 0 :(得分:1)
使用格式化程序并从String
返回extractDate
(并重新排列数组中的日期格式):
private static final SimpleDateFormat outputDate = new SimpleDateFormat("dd/MM/yyyy");
public static void main(String[] args) {
System.out.println ("03/20/2020-->:" + extractDate("03/20/2020") );
System.out.println ("2033-05-01-->:" + extractDate("2033-05-01") );
System.out.println ("08-05-34-->:" + extractDate("08-05-34") );
System.out.println ("30-DEC-2013 -->:" + extractDate("30-DEC-2013") );
System.out.println ("DEC-31-2013 -->:" + extractDate("DEC-31-2013") );
}
public static String extractDate(String dateStr) {
String [] datePatternsUS = { "MM/dd/yyyy", "yyyy-MM-dd", "dd-MM-yy", "dd-MMM-yyyy","MMM-dd-yyyy" };
Date date = null;
try {
date = DateUtils.parseDate(dateStr, datePatternsUS);
return outputDate.format(date);
}
catch (Exception except) {
except.printStackTrace();
}
return null;
}
然而,问题是"yyyy-MM-dd", "dd-MM-yy"
是冲突模式,因此(取决于顺序)第2行或第3行输出虚假日期。
输出是:
2020年3月20日 - >:2021年3月8日
2033年5月1日 - >:23/11/2006
34年8月5日 - >:2034年8月5日
30-DEC-2013 - >:2013年12月30日
DEC-31-2013 - >:2013年12月31日
答案 1 :(得分:1)
首先,您应该将模式MMM-dd-yyyy
添加到模式中。我已对您的方法extractDate()
进行了简化,并添加了Locale.US
。现在它正确返回所有输入日期。
static String [] formatStrings = {"d-M-yy", "d-M-yyyy", "d/M/yy", "d/M/yyyy",
"dd-MM-yy", "yyyy-MM-dd", "dd-MMM-yy","dd-MMM-yyyy","dd-MM-yyyy",
"dd/MM/yy","dd/MMM/yy","dd/MMM/yyyy",
"MMM-dd-yyyy"};
public static void main(String[] args) {
System.out.println ("03/20/2020-->:" + extractDate("03/20/2020") );
System.out.println ("2033-05-01-->:" + extractDate("2033-05-01") );
System.out.println ("08-05-34-->:" + extractDate("08-05-34") );
System.out.println ("30-DEC-2013 -->:" + extractDate("30-DEC-2013") );
System.out.println ("DEC-31-2013 -->:" + extractDate("DEC-31-2013") );
}
public static Date extractDate(String dateString) {
for (String formatString : formatStrings) {
try
{
return new SimpleDateFormat(formatString, Locale.US).parse(dateString);
}
catch (ParseException e) {}
}
return null;
}
答案 2 :(得分:0)
问题是您没有任何与最后日期格式匹配的模式。将其添加到您的数组中。
MMM-dd-yyyy