Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 程控Joda时间格式化程序_Java_Jodatime - Fatal编程技术网

Java 程控Joda时间格式化程序

Java 程控Joda时间格式化程序,java,jodatime,Java,Jodatime,我试图创建一个Joda2.2DateTimeFormatter来重构我的代码。我试图复制的行为是 private String getSemesterLabel() { StringBuilder sb = new StringBuilder(date.toString("yyyy")); if (date.getMonthOfYear() < 7) { sb.insert(0, "first semester "); } else {

我试图创建一个Joda2.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();
}
私有字符串getSemesterLabel(){
StringBuilder sb=新的StringBuilder(日期:toString(“yyyy”);
if(date.getMonthOfYear()<7){
sb.插入(0,“第一学期”);
}否则{
sb.插入(0,“第二学期”);
}
使某人返回字符串();
}

获取封装上述行为的
DateTimeFormatter
的最简单方法是什么?

您不能使用内置模式符号打印学期信息(请参见此)。您有两个选择:

  • 从头开始构建逻辑

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

    DateTimeFormatter format = DateTimeFormat.forPattern("yyyy");
    
    您还可以通过调用以下命令从Joda
    DateTime
    检索一年中的月份:

    myDateTime.monthOfYear().get();
    

  • 使用
    DateTimeFormatterBuilder
    构造格式化程序

    另一种方法可能是构造一个显示首选文本的自定义
    DateTimeFormatter
    。比如:

    DateTimeFormatterBuilder builder = new DateTimeFormatterBuilder();
    builder.append(DateTimeFormat.forPattern("yyyy"));
    builder.appendLiteral(' ');
    builder.append(new SemesterPrinter());
    return builder.toFormatter();
    
    其中,
    SemesterPrinter
    需要实施,并负责根据提供的日期信息生成第一学期的文本或第二学期的文本


  • 我发现你的评论和否决票相当轻率,因为我已经阅读了全部文档,但找不到任何相关内容。到目前为止,我找到的唯一方法是从头创建一个完整的DateTimeFormatter,这太多了,不值得重构。因为我不知道该怎么做(这说明我看不到我能提供的任何细节)并不意味着这个问题是不合法的。我想我完全误解了你的问题。你希望找一个能理解学期概念的老师吗?我不知道你说的“单身”是什么意思。我正在尝试创建一个
    DateTimeFormatter
    对象,该对象将封装上述代码中描述的业务行为。我不认为答案像模式(字符串)的日期时间格式那样简单。如果你错投了反对票。我希望你能投反对票。谢谢,我明白了。我想我的答案现在定义了两种方法。我已经取消了我的否决票,因为你的附加评论现在已经更详细地解释了你的背景。好吧,我看不出这将如何打印“第一学期”或“第二学期”。。。只印刷年份是(非常)容易的部分…@LudovicPénet啊,转念一想,我可能误解了这个问题。我已经编辑了我的答案。我担心我真的必须从头开始构建DateTimePrinter。。。