想通过java转换美国格式的日期

时间:2016-01-22 08:38:24

标签: java date

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

请告知如何实现以下是我的代码

 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

3 个答案:

答案 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