我正在尝试做一个简单的练习,我会约会,添加90天,然后将其格式化为:
1998年4月20日星期一。
我要使用GregorianCalendar
和DateFormat
执行此操作。到目前为止,我有这个编译代码,但是我得到一个运行时错误,我无法将给定的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
日期
答案 0 :(得分:2)
您必须更正您的代码:
而不是
String date = sdf.format(ddate);
尝试:
String date = sdf.format(ddate.getTime());
答案 1 :(得分:2)
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 类。
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 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance 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的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。