Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.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 Date:getDisplayName方法仅在CI上向dayOfWeek添加点字符_Java_Android_Formatting_Localdate_Threetenbp - Fatal编程技术网

Java Date:getDisplayName方法仅在CI上向dayOfWeek添加点字符

Java Date:getDisplayName方法仅在CI上向dayOfWeek添加点字符,java,android,formatting,localdate,threetenbp,Java,Android,Formatting,Localdate,Threetenbp,在CircleCI上运行的我的UnitTest中调用localDate.getDayOfWeek().getDisplayName,与在本地运行UnitTest相比,返回的值不同 以下是简化的示例代码: LocalDate localDate = LocalDate.of(2019, 12, 20); String dayOfWeek = localDate.getDayOfWeek().getDisplayName(TextStyle.SHORT, Locale.GERMANY); asse

在CircleCI上运行的我的UnitTest中调用
localDate.getDayOfWeek().getDisplayName
,与在本地运行UnitTest相比,返回的值不同

以下是简化的示例代码:

LocalDate localDate = LocalDate.of(2019, 12, 20);
String dayOfWeek = localDate.getDayOfWeek().getDisplayName(TextStyle.SHORT, Locale.GERMANY);

assertEquals("Fr", dayOfWeek); // actual = "Fr."
dayOfWeek
仅在CI上包含“.”,但我不知道为什么以及如何(正确地)修复它

这是UnitTest的错误日志:

junit.framework.ComparisonFailure: expected:<Fr[.]> but was:<Fr[]>
..
junit.framework.ComparisonFailure:应为:但为:
..
提示:我正在使用

更新 如@OleV.V.和@Arvind Kumar Avinash所述,不同行为(本地和CI)的原因是JDK版本(本地8.x和CI 11.x)的差异

这就留下了我的一部分问题:“如何正确地解决这个问题?” 这是在我的CI docker映像上更改JDK版本的正确/唯一方法?

更新: 查看更新后的问题后,问题似乎是因为运行CircleCI的机器上缺少的库。如果没有这个库,当代码在这台机器上重新编译时,它可能默认为
java.time
。您应该检查这台机器上的一些东西:

  • 如果库已成功导入
  • 如果缺少某些类型,则有任何设置可自动导入最合适的类型
  • 如果JDK版本与本地计算机的版本相同
  • 原始答复: 您可以使用
    TextStyle.SHORT\u STANDALONE
    输出:

    Fr
    
    Fr
    Fr
    
    Fr
    Fr.
    Fr
    
    但在我的系统上,
    TextStyle.SHORT
    的输出中没有一个点。尽管如此,如果您仍然希望使用
    TextStyle.SHORT
    且不带点(或任何标点符号),则可以用空白字符串替换每个标点符号

    import java.util.Locale;
    
    import org.threeten.bp.LocalDate;
    import org.threeten.bp.format.TextStyle;
    
    class Main {
        public static void main(String[] args) {
            LocalDate localDate = LocalDate.of(2019, 12, 20);
            String dayOfWeek = localDate.getDayOfWeek().getDisplayName(TextStyle.SHORT, Locale.GERMANY);
            System.out.println(dayOfWeek);
    
            // Remove all punctuation mark
            dayOfWeek = dayOfWeek.replaceAll("\\p{Punct}", "");
            System.out.println(dayOfWeek);
        }
    }
    
    输出:

    Fr
    
    Fr
    Fr
    
    Fr
    Fr.
    Fr
    
    注意:TextStyle.SHORT的结果会随着
    java.time
    API的变化而变化,如下所示:

    import java.time.LocalDate;
    import java.time.format.TextStyle;
    import java.util.Locale;
    
    class Main {
        public static void main(String[] args) {
            LocalDate localDate = LocalDate.of(2019, 12, 20);
    
            String dayOfWeek = localDate.getDayOfWeek().getDisplayName(TextStyle.SHORT_STANDALONE, Locale.GERMANY);
            System.out.println(dayOfWeek);
    
            dayOfWeek = localDate.getDayOfWeek().getDisplayName(TextStyle.SHORT, Locale.GERMANY);
            System.out.println(dayOfWeek);
    
            // Remove all punctuation mark
            dayOfWeek = dayOfWeek.replaceAll("\\p{Punct}", "");
            System.out.println(dayOfWeek);
        }
    }
    
    输出:

    Fr
    
    Fr
    Fr
    
    Fr
    Fr.
    Fr
    

    goemic-有什么更新吗?这能回答你的问题吗?ThreeTenABP在CircleCI上运行吗?只是好奇。我很确定这种错误行为与不同的java版本(本地和CI)有关,但这并不能回答我关于如何正确修复iTunes的问题。SHORT_STANDALONE并不能解决这个问题。我仍然在CI上得到错误:
    junit.framework.ComparisonFailure:expected:但是:
    @goemic-查看错误消息,
    assertEquals(“Fr.”,dayOfWeek)
    将通过,但您会说,
    …在CircleCI上运行与在本地运行UnitTest相比返回不同的值。
    这是令人惊讶的。迁移到
    java.time
    不是一个选项(现在),因为我们仍然面临r8去糖化的一些问题。替换这些点的是我已经在做的“黑客”修复,但我正在寻找一个真正的修复,以使代码再次干净-并避免项目中出现太多黑客;)这确实令人惊讶,这就是我发布这个问题的原因:D我认为它与CI的docker图像中使用的jdk版本有某种关联。@goemic-Co顺便说一句,在你发布此评论的同时,我也在更新答案:)。问题解决后,我将等待您的更新。即使我的答案不适合你,我建议你发布自己的工作解决方案,这将有助于未来的访问者。