java.util.Date format conversion yyyy-mm-dd to mm-dd-yyyyJava 8+Java 7-原始答案

2022-08-31 10:27:00

我有一个格式.我希望它采用以下格式java.util.Dateyyyy-mm-ddmm-dd-yyyy

以下是我为此转换尝试的示例util:

// Setting the pattern
SimpleDateFormat sm = new SimpleDateFormat("mm-dd-yyyy");
// myDate is the java.util.Date in yyyy-mm-dd format
// Converting it into String using formatter
String strDate = sm.format(myDate);
//Converting the String back to java.util.Date
Date dt = sm.parse(strDate);

我仍然得到的输出不是 格式 。mm-dd-yyyy

请让我知道如何格式化从 到java.util.Dateyyyy-mm-ddmm-dd-yyyy


答案 1

Date是自 Unix 时代(1970 年 1 月 1 日 00:00:00 UTC)以来毫秒数的容器。

它没有格式的概念。

Java 8+

LocalDateTime ldt = LocalDateTime.now();
System.out.println(DateTimeFormatter.ofPattern("MM-dd-yyyy", Locale.ENGLISH).format(ldt));
System.out.println(DateTimeFormatter.ofPattern("yyyy-MM-dd", Locale.ENGLISH).format(ldt));
System.out.println(ldt);

输出。。。

05-11-2018
2018-05-11
2018-05-11T17:24:42.980

Java 7-

你应该利用ThreeTen Backport

原始答案

例如。。。

Date myDate = new Date();
System.out.println(myDate);
System.out.println(new SimpleDateFormat("MM-dd-yyyy").format(myDate));
System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(myDate));
System.out.println(myDate);

输出。。。

Wed Aug 28 16:20:39 EST 2013
08-28-2013
2013-08-28
Wed Aug 28 16:20:39 EST 2013

所有格式都没有更改基础值。这就是 s 的目的DateDateFormatter

使用其他示例进行了更新

以防万一第一个例子没有意义...

此示例使用两个格式化程序来设置同一日期的格式。然后,我使用这些相同的格式化程序将值解析回s。生成的分析不会改变报告其值的方式。StringDateDate

Date#toString只是其内容的转储。您无法更改此设置,但可以按照自己喜欢的任何方式设置对象的格式Date

try {
    Date myDate = new Date();
    System.out.println(myDate);

    SimpleDateFormat mdyFormat = new SimpleDateFormat("MM-dd-yyyy");
    SimpleDateFormat dmyFormat = new SimpleDateFormat("yyyy-MM-dd");

    // Format the date to Strings
    String mdy = mdyFormat.format(myDate);
    String dmy = dmyFormat.format(myDate);

    // Results...
    System.out.println(mdy);
    System.out.println(dmy);
    // Parse the Strings back to dates
    // Note, the formats don't "stick" with the Date value
    System.out.println(mdyFormat.parse(mdy));
    System.out.println(dmyFormat.parse(dmy));
} catch (ParseException exp) {
    exp.printStackTrace();
}

哪些输出...

Wed Aug 28 16:24:54 EST 2013
08-28-2013
2013-08-28
Wed Aug 28 00:00:00 EST 2013
Wed Aug 28 00:00:00 EST 2013

另外,请注意格式模式。仔细看看SimpleDateFormat,以确保您没有使用错误的模式;)


答案 2
SimpleDateFormat("MM-dd-yyyy");

而不是

SimpleDateFormat("mm-dd-yyyy");

因为MM points Monthmm points minutes

SimpleDateFormat sm = new SimpleDateFormat("MM-dd-yyyy");
String strDate = sm.format(myDate);