GregorianCalendar和DateFormat Java

时间:2017-09-25 15:14:58

标签: java date-format gregorian-calendar

我正在尝试做一个简单的练习,我会约会,添加90天,然后将其格式化为:

  

1998年4月20日星期一。

我要使用GregorianCalendarDateFormat执行此操作。到目前为止,我有这个编译代码,但是我得到一个运行时错误,我无法将给定的Object格式化为Date

import java.util.*;
import java.text.*;

class Assignment21 {
    public static void main(String args[]) {
        GregorianCalendar ddate = new GregorianCalendar(1994, 10, 20);
        ddate.add(Calendar.DAY_OF_MONTH, 90);
        SimpleDateFormat sdf = new SimpleDateFormat("EEE, MM dd, yyyy");
        String date = sdf.format(ddate);
    }
}

如何使用GregorianCalendar

正确输出预定义的DateFormat日期

2 个答案:

答案 0 :(得分:2)

您必须更正您的代码:

而不是

String date = sdf.format(ddate);

尝试:

String date = sdf.format(ddate.getTime());

答案 1 :(得分:2)

TL;博士

LocalDate.of( 1994 , Month.OCTOBER , 20 )                  // Generate a date-only value, a `LocalDate` object, without time-of-day and without time zone.
.plusDays( 90 )                                            // Add a span of time. Using immutable objects, a new `LocalDate` object is instantiated, without altering the first.
.format(                                                   
    DateTimeFormatter.ofLocalizedDate( FormatStyle.FULL )
                     .withLocale( Locale.US )
)
  

1995年1月18日星期三

java.time

你正在使用现在遗留下来的麻烦的旧日期时间类,取而代之的是 java.time 类。

LocalDate ld = LocalDate.of( 1994 , 10 , 20 ) ; // Sane numbering for year and month, unlike legacy classes. '1994' = 1994, and 10 = October.
LocalDate ldLater = ld.plusDays( 90 ) ;

或使用Month枚举。

LocalDate ld = LocalDate.of( 1994 , Month.OCTOBER , 20 ) ; 
LocalDate ldLater = ld.plusDays( 90 ) ;

让java.time自动为您定位。

DateTimeFormatter f = DateTimeFormatter.ofLocalizedDate( FormatStyle.FULL ).withLocale( Locale.US ) ;
String output = ldLater.format( f ) ;

关于 java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和& SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*类。

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore