无法在java

时间:2016-05-15 04:56:50

标签: java date

我有以下java程序,您可以在其中指定要转换日期格式的参数,无论您是要以美国还是英国格式转换它。

现在的问题是,当我希望按照美国格式格式化日期时它不会这样做,请求你请告知这种格式缺少什么,下面是程序和输出,当我尝试转换时它采用美国格式

import java.text.ParseException;
import java.text.SimpleDateFormat;
import org.apache.commons.lang.time.DateUtils;


public class DateFormattingTest {
    public static void main(String[] args) throws ParseException {

        System.out.println ("01-Mar-2016-->" + extractDate("01-Mar-2016",  "US") );

    }




    public static java.util.Date extractDate(String dateStr, String dateType) {

        java.util.Date date = null;


        if (!dateStr.matches("\\d{4}-\\d{2}-\\d{2}")){

            String[] datePatternsOfUk = { "d-M-yy", "d-M-yyyy", "d/M/yy", "d/M/yyyy", "yyyy-MM-dd","dd-MM-yy", "dd-MMM-yy","dd-MMM-yyyy","dd-MM-yyyy",
                    "dd/MM/yy","dd/MMM/yy","dd/MMM/yyyy"};
            String[] datePatternsOfUs = { "M-d-yy","MM-dd-yy","M/d/yy","MM/dd/yy", "MM/dd/yy", "MMM-dd-yy",
                    "MMM/dd/yy", "MMM-dd-yyyy", "MM-dd-yyyy", "MMM/dd/yyyy",
                    "MM/dd/yyyy" };
            String[] datePatterns = datePatternsOfUk;

            try {   
        if (dateType.equals("US")) {
            datePatterns = datePatternsOfUs;
        } else if (dateType.equals("UK")) {
            datePatterns = datePatternsOfUk;
        }
            int p = dateStr.lastIndexOf("/");
        if (p == -1) {
            p = dateStr.lastIndexOf("-");
        }
        String firstSubstring = dateStr.substring(0, p + 1);
        String secondSubstring = dateStr.substring(p + 1);
        if (p != -1 && secondSubstring.length() <= 2) {
            secondSubstring = Integer.toString(2000 + Integer.parseInt(secondSubstring));
            dateStr = firstSubstring + secondSubstring;
        }

            date = DateUtils.parseDate(dateStr, datePatterns);
        } catch (ParseException e) {


        } 
        return date;
        }



        if (dateStr.matches("\\d{4}-\\d{2}-\\d{2}")){
            try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            String convertedCurrentDate =sdf.format(sdf.parse(dateStr));

                date=sdf.parse(convertedCurrentDate);
            } catch (ParseException e) {


            }
            return date;
        }
        return null;
                }

   }

我获得美国格式的输出如下所示。

01-Mar-2016-->null

实际上,在美国格式中我希望日期显示为

01-Mar-2016--> 3-Jan-2016

大家请告知这是我的预期结果是不正确的,按照美国格式

1 个答案:

答案 0 :(得分:1)

01-Mar-2016不是您为美国定义的格式。将dd-MMM-yyyy添加到datePatternsOfUs,如

String[] datePatternsOfUs = { "M-d-yy","MM-dd-yy","M/d/yy","MM/dd/yy",
        "MM/dd/yy", "MMM-dd-yy", "MMM/dd/yy", "MMM-dd-yyyy", 
        "MM-dd-yyyy", "MMM/dd/yyyy", "MM/dd/yyyy", "dd-MMM-yyyy" };