如何将给定的字符串转换为仅使用给定格式的java日期?

如何将给定的字符串转换为仅使用给定格式的java日期?,java,date,datetime,Java,Date,Datetime,我有一个java字符串。我想把它转换成日期。我使用了SimpleDataFormat。但问题是,如果我传递dd-mm-yy而不是dd-mm-yyy,那么它也会解析字符串并转换为日期。下面是代码 private static SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-YYYY HH:mm:ss"); public static void main(String args[]){ Date d =

我有一个java字符串。我想把它转换成日期。我使用了SimpleDataFormat。但问题是,如果我传递dd-mm-yy而不是dd-mm-yyy,那么它也会解析字符串并转换为日期。下面是代码

 private static  SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-YYYY HH:mm:ss");
    public static void main(String args[]){
        Date d = null;
        String dat="14-01-16 21:59:59";
        try {
            d = dateFormat.parse(dat);
        }
        catch (ParseException e){
            e.printStackTrace();
        }
        System.out.println(d.toString());
    }

理想情况下,它会显示抛出异常,因为在dateFormatter中,我给出的格式是dd-MM-yyy,但在字符串中,我传递了dd-MM-YY格式。那么有没有办法只允许那些只有dd-MM-YYYY格式的字符串,而不允许那些只有dd-MM-YY格式的字符串呢

private static  SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-YYYY HH:mm:ss");
public static void main(String args[])
{
    Date d = null;
    String dat="14-01-16 21:59:59";
    try 
    {
        if(!dat.matches("\\d\\d-\\d\\d-\\d\\d\\d\\d.*"))
            throw new ParseException(dat, 7);

        d = dateFormat.parse(dat);
    }
    catch (ParseException e)
    {
        e.printStackTrace();
    }
}

如果您不想接受YY,只接受YYYY,请使用正则表达式:

private static  SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-YYYY HH:mm:ss");
public static void main(String args[])
{
    Date d = null;
    String dat="14-01-16 21:59:59";
    try 
    {
        if(!dat.matches("\\d\\d-\\d\\d-\\d\\d\\d\\d.*"))
            throw new ParseException(dat, 7);

        d = dateFormat.parse(dat);
    }
    catch (ParseException e)
    {
        e.printStackTrace();
    }
}

如果您不想接受YY,只接受YYYY,请使用正则表达式:

private static  SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-YYYY HH:mm:ss");
public static void main(String args[])
{
    Date d = null;
    String dat="14-01-16 21:59:59";
    try 
    {
        if(!dat.matches("\\d\\d-\\d\\d-\\d\\d\\d\\d.*"))
            throw new ParseException(dat, 7);

        d = dateFormat.parse(dat);
    }
    catch (ParseException e)
    {
        e.printStackTrace();
    }
}

如果您不想接受YY,只接受YYYY,请使用正则表达式:

private static  SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-YYYY HH:mm:ss");
public static void main(String args[])
{
    Date d = null;
    String dat="14-01-16 21:59:59";
    try 
    {
        if(!dat.matches("\\d\\d-\\d\\d-\\d\\d\\d\\d.*"))
            throw new ParseException(dat, 7);

        d = dateFormat.parse(dat);
    }
    catch (ParseException e)
    {
        e.printStackTrace();
    }
}

RIF(阅读是基础)。阅读SimpleDataFormatAPI页面。请注意:“对于解析,如果模式字母的数量超过2,则不管数字的数量如何,年份都按字面解释。因此,使用模式“MM/dd/yyyy”,“01/11/12”解析为公元12年1月11日。”除非你处理的是非常早的日期,否则你可能会在阅读后拒绝1-1-1000之前的任何内容。我建议改变亨利的建议:拒绝1-1-1900(或某个合理的开始日期)之前的所有内容。RIF(阅读是基本的)。阅读SimpleDataFormatAPI页面。请注意:“对于解析,如果模式字母的数量超过2,则不管数字的数量如何,年份都按字面解释。因此,使用模式“MM/dd/yyyy”,“01/11/12”解析为公元12年1月11日。”除非你处理的是非常早的日期,否则你可能会在阅读后拒绝1-1-1000之前的任何内容。我建议改变亨利的建议:拒绝1-1-1900(或某个合理的开始日期)之前的所有内容。RIF(阅读是基本的)。阅读SimpleDataFormatAPI页面。请注意:“对于解析,如果模式字母的数量超过2,则不管数字的数量如何,年份都按字面解释。因此,使用模式“MM/dd/yyyy”,“01/11/12”解析为公元12年1月11日。”除非你处理的是非常早的日期,否则你可能会在阅读后拒绝1-1-1000之前的任何内容。我建议改变亨利的建议:拒绝1-1-1900(或某个合理的开始日期)之前的所有内容。RIF(阅读是基本的)。阅读SimpleDataFormatAPI页面。请注意:“对于解析,如果模式字母的数量超过2,则不管数字的数量如何,年份都按字面解释。因此,使用模式“MM/dd/yyyy”,“01/11/12”解析为公元12年1月11日。”除非你处理的是非常早的日期,否则你可能会在阅读后拒绝1-1-1000之前的任何内容。我建议改变亨利的建议:拒绝1-1-1900(或某个合理的开始日期)之前的所有内容。