日期格式仅使用日期和月份?

时间:2014-12-03 11:20:15

标签: android simpledateformat android-date

我需要构建一个仅显示日期和月份的日期示例: - 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;

2 个答案:

答案 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)

TL;博士

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日

请参阅live code in IdeOne.com

你的问题与自己相矛盾,有时会以你想要的格式显示连字符,但在另一个方面显示空格。如果您想要SPACE,请使用DateTimeFormatter.ofPattern( "dd MMM" )

关于java.time

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

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

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

从哪里获取java.time类?

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