java - 程序化 Joda 时间格式化程序

标签 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 的最简单方法是什么?

最佳答案

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

  1. 从头开始构建逻辑

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

    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并负责根据提供的日期信息生成文本第一学期第二学期

关于java - 程序化 Joda 时间格式化程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16172568/

相关文章:

Java 日期验证 joda 时间

java - 为什么 count less 还要用 synchronized 关键字呢?

java - 如何通过 Java 的 Runtime api 获取我的 Java 程序使用的内存?

android - 单元测试和 joda-time-android

java - Joda Time 给出了错误的时区

java - 如何减去两个 joda 日期时间?

javascript - 如何通过nashorn在Web应用程序启动期间加载js文件

java - Spring 无法接受请求

java - 如何在Retrofit中实现这一点?

java - 不同时区的MySql应用给出不同的结果