我需要构建一个仅显示日期和月份的日期示例: - 12月23日。我只有日值和月值,但是如何使用SimpleDateFormat构建格式化日期,格式如" dd-MMM"。如何修改以下方法以返回格式化日期?
public String formatDate(String day, String month, String year) {
// Do something with the date chosen by the user
SimpleDateFormat df = new SimpleDateFormat("dd-MMM");
}
假设我调用了上面的方法,例如formatDate(" 11"," 1","")那么它应该返回我" 11月1日& #34;
答案 0 :(得分:1)
这应该有效:
年份值设置为0,因为您没有它,但您可以将其传递给set方法。
public String formatDate(String day, String month, String year) {
// Do something with the date chosen by the user
SimpleDateFormat df = new SimpleDateFormat("dd-MMM");
Calendar c = Calendar.getInstance();
c.set(0, Integer.parseInt(month)-1, Integer.parseInt(day));
return df.format(c.getTimeInMillis());
}
答案 1 :(得分:1)
MonthDay.of( Month.JANUARY , 23 )
.toString()
...或...
MonthDay.of( Month.JANUARY , 23 )
.format( DateTimeFormatter.ofPattern( "dd MMM" ) )
MonthDay
如果您想要表示没有任何年份的月份和日期,请使用MonthDay
课程。专为此目的而建。
一个月和一天的标准ISO 8601格式为“--MM-DD”。类似于“YYYY-MM-DD”的日期格式,但用连字符代替年份。
在解析/生成字符串时,java.time类默认使用ISO 8601格式。因此,无需为此类字符串指定格式设置模式。对于您的自定义格式,我们必须定义格式化程序。我建议尽可能坚持使用ISO 8601格式。
MonthDay md = MonthDay.of( 12 , 23 );
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd-MMM" );
String output = md.format( f );
md.toString(): - 12-23
输出:12月23日
你的问题与自己相矛盾,有时会以你想要的格式显示连字符,但在另一个方面显示空格。如果您想要SPACE,请使用DateTimeFormatter.ofPattern( "dd MMM" )
。
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。