date:getdisplayname方法仅在ci上向dayofweek添加点字符

y3bcpkx1  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(288)

打电话 localDate.getDayOfWeek().getDisplayName 在我的unittest中,在circleci上运行unittest返回的值与在本地运行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[]>
..

提示:我正在使用3Ten android backport
更新如@olev.v.和@arvind kumar avinash所述不同行为(local和ci)的原因是jdk版本(local 8.x和ci 11.x)的不同。
这就留下了我的一部分问题:“如何正确地解决这个问题?”这是更改ci docker映像上jdk版本的正确/唯一方法吗?
btqmn9zl

btqmn9zl1#

更新:

在研究了更新后的问题之后,这个问题似乎是因为circleci运行的机器上缺少了一个由310个android backport组成的库。在没有这个库的情况下,它可能默认为 java.time 在这台机器上重新编译代码时。你应该检查一下这台机器上的一些东西:
如果库已成功导入。
如果有任何设置,在缺少某些类型时自动导入最合适的类型。
如果jdk版本与本地计算机的版本相同。

原始答案:

您可以单独使用textstyle.short\u

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_STANDALONE, Locale.GERMAN);
        System.out.println(dayOfWeek);
    }
}

输出:

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

注:结果为 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

相关问题