2016-01-22 400 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'只是次要問題。 –