java - 无法在java中解析美国格式的日期

标签 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

各位,请告知,这是我的预期结果与美国格式不正确

最佳答案

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" };

关于java - 无法在java中解析美国格式的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37234719/

相关文章:

java - 无法访问 JSP 中列表中对象数组中的每个元素

Javascript时刻-时区,不同时区日期之间的差异

javascript - 如何根据 php 返回的日期对象在 jquery 中创建一个新的日期对象?

java - 使用 Target=ElementType.TYPE 创建 AspectJ 进行注释(类注释)

java - ASM 从堆栈帧中获取精确值

java - 如何保持固定大小的 ListenableFuture 池?

linux - 如何将 YYYYMMDDHHMMSS 转换为 `date` 可读的日期

mysql - 如何插入 YYYY-MM-DDThh :mm:ss±hh:mm date in mysql with timezone?

Javascript 获取数组中的连续日期

java - 更改 Java 类加载器的优先级