227

如何将日历日期转换为yyyy-MM-dd格式。

Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 1);
Date date = cal.getTime();             
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
String date1 = format1.format(date);            
Date inActiveDate = null;
try {
    inActiveDate = format1.parse(date1);
} catch (ParseException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}

这将产生inActiveDate = Wed Sep 26 00:00:00 IST 2012. 但我需要的是2012-09-26. 我的目的是使用 Hibernate 标准将此日期与我的数据库中的另一个日期进行比较。所以我需要yyyy-MM-dd格式的日期对象。

4

9 回答 9

364

JavaDate是自 1970 年 1 月 1 日 00:00:00 GMT 以来的毫秒数的容器。

当您使用类似的东西时System.out.println(date),Java 使用Date.toString()来打印内容。

更改它的唯一方法是覆盖Date并提供您自己的Date.toString(). 现在在你启动你的 IDE 并尝试这个之前,我不会;它只会使事情复杂化。您最好将日期格式化为您想要使用(或显示)的格式。

Java 8+

LocalDateTime ldt = LocalDateTime.now().plusDays(1);
DateTimeFormatter formmat1 = DateTimeFormatter.ofPattern("yyyy-MM-dd", Locale.ENGLISH);
System.out.println(ldt);
// Output "2018-05-12T17:21:53.658"

String formatter = formmat1.format(ldt);
System.out.println(formatter);
// 2018-05-12

在 Java 8 之前

您应该使用ThreeTen Backport

以下是出于历史目的而保留的(作为原始答案)

您可以做的是格式化日期。

Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 1);
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(cal.getTime());
// Output "Wed Sep 26 14:23:28 EST 2012"

String formatted = format1.format(cal.getTime());
System.out.println(formatted);
// Output "2012-09-26"

System.out.println(format1.parse(formatted));
// Output "Wed Sep 26 00:00:00 EST 2012"

这些实际上是相同的日期,表示方式不同。

于 2012-09-25T04:27:57.800 回答
21

你的代码是错误的。没有必要解析日期并将其保留为 Date 对象。

您可以在要显示时格式化日历日期对象并将其保留为字符串。

Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 1);
Date date = cal.getTime();             
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");          
String inActiveDate = null;
try {
    inActiveDate = format1.format(date);
    System.out.println(inActiveDate );
} catch (ParseException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}
于 2012-09-25T04:05:05.043 回答
13

java.time

MadProgrammer的答案是正确的,尤其是关于Joda-Time的提示。Joda-Time 的继任者现在作为新的java.time 包内置到Java 8中。这是 Java 8 中的示例代码。

使用日期时间(而不是本地日期)时,时区至关重要。日期取决于时区。例如,印度时区+05:30比 UTC 提前五个半小时),而法国仅提前一个小时。因此,在印度新一天的某个时刻有一个日期,而在法国的同一时刻有一个“昨天”的日期。创建缺少任何时区或偏移信息的字符串输出会造成歧义。你要求 YYYY-MM-DD 输出,所以我提供了,但我不推荐它。而不是ISO_LOCAL_DATE我本来可以ISO_DATE得到这个输出:2014-02-25+05:30

ZoneId zoneId = ZoneId.of( "Asia/Kolkata" );
ZonedDateTime zonedDateTime = ZonedDateTime.now( zoneId );

DateTimeFormatter formatterOutput = DateTimeFormatter.ISO_LOCAL_DATE; // Caution: The "LOCAL" part means we are losing time zone information, creating ambiguity.
String output = formatterOutput.format( zonedDateTime );

转储到控制台...</p>

System.out.println( "zonedDateTime: " + zonedDateTime );
System.out.println( "output: " + output );

运行时……</p>

zonedDateTime: 2014-02-25T14:22:20.919+05:30[Asia/Kolkata]
output: 2014-02-25

乔达时间

使用 Java.time 的前身Joda-Time库的类似代码。

DateTimeZone zone = new DateTimeZone( "Asia/Kolkata" );
DateTime dateTime = DateTime.now( zone );
DateTimeFormatter formatter = ISODateTimeFormat.date();
String output = formatter.print( dateTime );

ISO 8601

顺便说一句,输入字符串的格式是标准格式,是ISO 8601定义的几种方便的日期时间字符串格式之一。

在解析和生成各种日期时间值的字符串表示时,Joda-Time 和 java.time 默认使用 ISO 8601 格式。

于 2014-02-25T08:59:05.717 回答
6

java.util.Date对象不能以自定义格式表示日期,而是您必须使用返回的方法。SimpleDateFormat.formatstring

String myString=format1.format(date);
于 2012-09-25T04:02:21.920 回答
3
public static void main(String[] args) {
    Calendar cal = Calendar.getInstance();
    cal.set(year, month, date);
    SimpleDateFormat format1 = new SimpleDateFormat("yyyy MM dd");
    String formatted = format1.format(cal.getTime());
    System.out.println(formatted);
}
于 2017-09-26T09:06:51.123 回答
2

为了解析一个java.util.Date对象,您必须首先使用您自己的格式将其转换为字符串。

inActiveDate = format1.parse(  format1.format(date)  );

但我相信你在这里是多余的。

于 2012-09-25T04:02:51.117 回答
2
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 7);
Date date = c.getTime();
SimpleDateFormat ft = new SimpleDateFormat("MM-dd-YYYY");
JOptionPane.showMessageDialog(null, ft.format(date));

这将在 JOption 窗口窗格中以月、日和年格式显示您的日期 + 7 天。

于 2015-05-16T11:37:45.883 回答
2
public static String ThisWeekStartDate(WebDriver driver) {
        Calendar c = Calendar.getInstance();
        //ensure the method works within current month
        c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
        System.out.println("Before Start Date " + c.getTime());
        Date date = c.getTime();

          SimpleDateFormat dfDate = new SimpleDateFormat("dd MMM yyyy hh.mm a");

          String CurrentDate = dfDate.format(date);
          System.out.println("Start Date " + CurrentDate);
          return CurrentDate;

    }
    public static String ThisWeekEndDate(WebDriver driver) {

        Calendar c = Calendar.getInstance();
        //ensure the method works within current month
        c.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
        System.out.println("Before End Date " + c.getTime());
        Date date = c.getTime();

          SimpleDateFormat dfDate = new SimpleDateFormat("dd MMM yyyy hh.mm a");

          String CurrentDate = dfDate.format(date);
          System.out.println("End Date " + CurrentDate);
          return CurrentDate;
    }
于 2018-07-05T11:16:14.020 回答
0

我发现此代码以格式比较日期以与数据库中的日期字段进行比较...这可能对您有帮助...

当您使用 simpledateformat 将字符串转换为日期时,很难与 mysql 数据库中的 Date 字段进行比较。

因此,使用 select STR_to_DATE('yourdate','%m/%d/%Y') --> 以这种格式转换 java 字符串日期,然后您将获得 mysql 日期字段的确切日期格式。

http://javainfinite.com/java/java-convert-string-to-date-and-compare/

于 2015-08-19T17:26:05.093 回答