我正在尝试创建一个Joda 2.2 DateTimeFormatter
来重构我的代码。我试图重现的行为是
private String getSemesterLabel() {
StringBuilder sb = new StringBuilder(date.toString("yyyy"));
if (date.getMonthOfYear() < 7) {
sb.insert(0, "first semester ");
} else {
sb.insert(0, "second semester ");
}
return sb.toString();
}
获取封装上述行为的DateTimeFormatter
的最简单方法是什么?
答案 0 :(得分:2)
您无法使用内置模式符号打印学期信息(请参阅此similar issue in a bug report)。您有两种选择:
从头开始构建逻辑
您可以使用DateTimeFormatter
类中的静态方法生成DateTimeFormat
个实例:
DateTimeFormatter format = DateTimeFormat.forPattern("yyyy");
您还可以通过致电:
从JodaDateTime
中检索一年中的某个月
myDateTime.monthOfYear().get();
使用DateTimeFormatterBuilder
构建格式化程序
另一种方法,可能是使用DateTimeFormatterBuilder
构建一个显示您首选文本的自定义DateTimeFormatter
。类似的东西:
DateTimeFormatterBuilder builder = new DateTimeFormatterBuilder();
builder.append(DateTimeFormat.forPattern("yyyy"));
builder.appendLiteral(' ');
builder.append(new SemesterPrinter());
return builder.toFormatter();
其中SemesterPrinter
需要实施DateTimePrinter
,并且可以根据提供的日期信息生成文本first semester
或second semester
。