程序化的Joda Time格式化程序

时间:2013-04-23 14:53:24

标签: java jodatime

我正在尝试创建一个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的最简单方法是什么?

1 个答案:

答案 0 :(得分:2)

您无法使用内置模式符号打印学期信息(请参阅此similar issue in a bug report)。您有两种选择:

  1. 从头开始构建逻辑

    您可以使用DateTimeFormatter类中的静态方法生成DateTimeFormat个实例:

    DateTimeFormatter format = DateTimeFormat.forPattern("yyyy");
    

    您还可以通过致电:

    从Joda DateTime中检索一年中的某个月
    myDateTime.monthOfYear().get();
    


  2. 使用DateTimeFormatterBuilder构建格式化程序

    另一种方法,可能是使用DateTimeFormatterBuilder构建一个显示您首选文本的自定义DateTimeFormatter。类似的东西:

    DateTimeFormatterBuilder builder = new DateTimeFormatterBuilder();
    builder.append(DateTimeFormat.forPattern("yyyy"));
    builder.appendLiteral(' ');
    builder.append(new SemesterPrinter());
    return builder.toFormatter();
    

    其中SemesterPrinter需要实施DateTimePrinter,并且可以根据提供的日期信息生成文本first semestersecond semester

    < / LI>