当前位置: 首页 > 面试题库 >

Java:如何以对语言环境敏感的方式显示工作日,月份和日期,而没有年份

幸弘光
2023-03-14
问题内容

在我的应用中,我需要以对语言环境敏感的方式显示日期。因此,“ 2018年5月10日星期四”应按原样显示在en_US中,但应显示为“
2018年5月10日星期四”在en_GB中(英国英文)。

在大多数情况下,我可以将以下样式的代码与java.time API类一起使用:

public String toString(ZonedDateTime input) {
    DateTimeFormatter dateTimeFormatter = getDateTimeFormatter(FormatStyle.MEDIUM, FormatStyle.SHORT);
    return input.format(dateTimeFormatter);
}

private DateTimeFormatter getDateTimeFormatter(FormatStyle dateStyle, FormatStyle timeStyle) {
    String pattern = DateTimeFormatterBuilder.getLocalizedDateTimePattern(
            dateStyle, timeStyle, IsoChronology.INSTANCE, Locale.getDefault());

    return DateTimeFormatter.ofPattern(pattern);
}

在这种情况下,我没有指定明确的日期模式,而是指定了符号格式

我不确定在没有满足我需求的标准FormatStyle的情况下最好的处理方式。

一个具体的例子是我需要显示星期几,月份和日期,但没有年份。

因此,“ en_US”中的“ 2018年5月10日,星期四”应显示为“ 5月10日,星期四”,而在en_GB(英语:English UK)中应显示为“
5月10日,星期四”。

关于如何处理此要求的任何建议?


问题答案:
    String formatPattern = DateTimeFormatterBuilder.getLocalizedDateTimePattern(
            FormatStyle.FULL, null, IsoChronology.INSTANCE, loc);
    formatPattern = formatPattern.replaceFirst("^.*?([MLdEec].*[MLdEec]).*$", "$1");
    DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern(formatPattern, loc);
    System.out.println(LocalDate.now(ZoneId.of("Pacific/Johnston")).format(dateFormatter));

输出loc等于Locale.US

5月10日,星期四

Locale.UK(英国)一起:

5月10日,星期四

工作原理:我从一个本地化的格式模式字符串开始。在我的正则表达式中,我识别出与月份(ML),月份中的月份(d)和星期几(Eec)有关的格式模式字母。我将此类字符串的开头到结尾保留子字符串。领先的勉强量词.*?可确保我得到第一个匹配的字母。如果某些地区将年份设置在这些想要的元素之间,那么它将最终被包括在内。

我觉得自己太有创意了。在决定您想要这样的东西之前,请先测试您能想到的所有测试示例。



 类似资料:
  • 问题内容: 如何在Java中动态显示for循环中特定月份的日期,月份和年份? 问题答案: 这简要演示了Java 和类的一些基础知识。根据您的问题,这是我能做的最好的事情。

  • 我在利用这一刻。js以特定的形式显示时间- 上面的代码以下面的格式显示日期和时间 0年0月1天37小时 我需要展示这样的东西 0年0月1天13小时 我已经尝试使用from现在和from https://momentjs.com/docs/#/displaying/from/ 但无法获得输出。我怎样才能做到这一点。

  • 问题内容: 有没有一种方法可以用Java / Kotlin中的区域设置正确的格式格式化日期和月份(紧凑格式),而不格式化年份?因此,对于英语,应为“ 9月20日”,而对于瑞典语为“ 9月20日”。 为了进行比较,在Cocoa平台上,我可以执行以下操作(在Swift中): 这将正确地扭转局面。Java SDK是否有等效的功能?我一直在尝试使用旧API的各种形式,但都没有成功。 注意: 与这个问题不同

  • 问题内容: 我正在尝试提取今天日期的月份。我有这个 但是当出现消息对话框时,它会显示数字 ,今天是数字。如何设置它以显示它是星期几? 问题答案: 返回星期几。星期日为0,星期六为6。 请参阅Java文档 根据下面给出的评论

  • 如果在程序中有人给我天数(ab=“days”),我需要将变量“days”设置为相同的数字(“val”中的值),如果有人给我月份(ab=“months”),那么我需要将其转换为天(val中的值),如果有人给我年(ab=“years”),那么我需要将其转换为天(val中的值)。ie如果用户在变量“ab”中指定了值的类型(即是月、年或日期)和变量“val”中的天数(天/月/年),我需要在变量“天”中获得

  • 我正在处理卡的到期日期。我有一个API,我将在其中获得“yyMM”格式的到期日期为“String”。在这里,我正在尝试使用 带有TimeZone.getTimeZone("UTC ")的SimpleDateFormat 所以我的代码就像 现在的问题是,当我通过 2011 年时,它给出的是 这里你可以看到我把11作为月份,但是它把它转换成10月而不是11月。 为什么? 还有哪些其他选项可以将带有 的