2016-01-22 114 views
2

我有下面的程序,其中日期需要在美国格式日期转换,因为您可以看到我正在输入日期,但 仍然需要以美国格式转换没有发生仪式现在想通过java转换美国格式的日期

请指教如何实现下面这个是我的代码

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 
+1

程序中的格式都不是美国格式。美国格式在“d”日之前会有月份“M”。 – khelwood

回答

0

问题是你没有任何模式匹配日期的最后一种格式。将此添加到您的阵列。

MMM-dd-yyyy 
1

使用格式化并返回从extractDateString(并重新安排你的数组中的日期格式):

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

08 -05-34 - >:2034年8月5日

30-DEC-2013 - >:30/12/2013

DEC-31-2013 - >:31/12/2013

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; 
} 
+1

如果我运行你的代码,前两个输出是:03/20/** 2020 ** - >:Tue Aug 03 00:00:00 CEST ** 2021 **,** 2033 ** - 05-01 - >:Thu Nov 23 00:00:00 CET ** 2006 **。我不认为这是,OP想要的。我想他希望所有日期格式化为这种模式:dd/MM/yyyy。我可能是错的,但由原始代码引起的'ParseException'只是次要问题。 –

相关问题