字符串到日期转换mm / dd / yy到java中的YYYY-MM-DD

时间:2018-05-18 06:39:09

标签: java

我想将mm / dd / yy格式的String值转换为YYYY-MM-DD Date。怎么做这个转换?

输入参数为: 03/01/18

将String转换为Date的代码如下所示

public static Date stringToDateLinen(String dateVlaue) {
    Date date = null;
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");

    try {

        date = formatter.parse(dateVlaue);

    } catch (ParseException e) {
        e.printStackTrace();
    }
    return date;
}

尝试使用此方法进行转换时,会显示以下错误

java.text.ParseException: Unparseable date: "03/01/18"

5 个答案:

答案 0 :(得分:0)

你写错了。事实上,对于您想要转换的日期,您需要编写 5

答案 1 :(得分:0)

您传递给SimpleDateFormat的格式是(" yyyy-MM-dd"),它要求日期为2013-03-01,因此错误。

您需要提供正确传递输入的格式,如下所示

public static Date stringToDateLinen(String dateVlaue) {
    Date date = null;
    SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yy");

    try {

        date = formatter.parse(dateVlaue);

    } catch (ParseException e) {
        e.printStackTrace();
    }
    return date;
}

答案 2 :(得分:0)

正如您所说的输入格式不同,首先将String转换为有效的Date对象。获得Date对象后,您可以根据需要将其格式化为不同的类型check

转换为日期,

SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yy");
date = formatter.parse(dateVlaue);

以其他格式打印出来

SimpleDateFormat formatter1 = new SimpleDateFormat("yyyy-MM-dd");
dateString = formatter1.format(date)

答案 3 :(得分:0)

上述问题的解决方案

  1. 将格式为“dd / mm / yy”的字符串日期值转换为日期。
  2. 使用转换后的日期可以构建所需的日期格式。
  3. 该方法在下面给出了

    public static String stringToDateLinen(String dateVlaue) {
        Date date = null;
        SimpleDateFormat formatter = new SimpleDateFormat("dd/mm/yy");
        String dateString = null;
        try {
            // convert to Date Format From "dd/mm/yy" to Date
            date = formatter.parse(dateVlaue);
            // from the Converted date to the required format eg : "yyyy-MM-dd"
            SimpleDateFormat formatter1 = new SimpleDateFormat("yyyy-MM-dd");
            dateString = formatter1.format(date);
    
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return dateString;
    }
    

答案 4 :(得分:0)

编辑:您的问题是“字符串值格式为mm / dd / yy”,但我从您的评论中了解到您的意思是“我的输入格式为dd / mm / yy as string “,所以我相应地改变了下面代码中的格式模式字符串。否则,两种情况下的代码都是相同的。

public static Optional<LocalDate> stringToDateLinen(String dateValue) {
    DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("dd/MM/yy");
    try {
        return Optional.of(LocalDate.parse(dateValue, dateFormatter));
    } catch (DateTimeParseException dtpe) {
        return Optional.empty();
    }
}

试一试:

    stringToDateLinen("03/01/18")
            .ifPresentOrElse(System.out::println, 
                    () -> System.out.println("Could not parse"));

输出:

  

2018年1月3日

我建议你远离SimpleDateFormat。它已经过时了,而且非常麻烦。 Date就像过时一样。而是使用现代Java日期和时间API LocalDate中的DateTimeFormatterjava.time。与它合作真是太好了。 LocalDate是一个没有时间的日期,所以这比Date更好地满足您的要求,尽管它的名称是一个时间点。 LocalDate.toString()生成您所希望的格式(尽管LocalDate中没有格式)。

我的方法将你的2位数年份解释为2000年,即从2000年到2099年。请在决定这是你想要的之前三思而后行。

如果无法将字符串解析为有效日期,您希望发生什么?我担心返回null是等待发生的NullPointerException以及随后的调试会话以追踪根本原因。您可以考虑让DateTimeParseException从您的方法中抛出(只是在Javadoc中声明),因此根本原因在堆栈跟踪中。如果不应该发生这种情况,甚至可以抛出AssertionError。在我的代码中,我返回一个Optional,它清楚地向调用者发出信号,表明可能没有结果,(我希望)阻止任何NullPointerException。在调用方法的代码中,我使用的是Java 9中引入的ifPresentOrElse方法。如果还没有使用Java 9,请使用ifPresent和/或阅读有关在其他地方使用Optional的更多信息。

您的代码出了什么问题?

其他答案是正确的:用于解析的格式模式字符串需要匹配输入(而不是输出)。抛出ParseException因为格式模式包含连字符和输入斜杠。你得到例外是好事,因为另一个问题是年,月和日的顺序不匹配,一年中的数字也不匹配。

链接