gpt4 book ai didi

java - 如何在 Java 中提取特定于语言环境格式的日期字段?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:36:23 25 4
gpt4 key购买 nike

我只需要从 Java 日期中提取月份和年份信息以显示在 GUI 中。此日期必须使用用户区域设置进行翻译。我知道 2 种格式化本地化日期的方法:

  1. 使用 DateFormat.getInstance(DateFormat.LONG, locale).format(date)
  2. 使用 new SimpleDateFormat("yyyy M", locale).format(date)

对于语言环境 SIMPLIFIED_CHINESE 和日期 2013-02-18,这给出:

  1. 2013年2月18日
  2. 2013 2

我们需要使用不带日期的LONG 格式(2013 年2 月)。 [变体 2 显然是 Not Acceptable ,因为年月的顺序不受语言环境的影响]。问题可能是:如何从长格式中删除日期部分(18 日)?我尝试使用方法 format(Date date, StringBuffer toAppendTo, FieldPosition pos),但这只允许提取数字部分,而不是额外的字符。

DateFormat.getInstance(DateFormat.LONG, Locale.SIMPLIFIED_CHINESE) 的模式是yyyy'年'M'月'd'日'。提取日部分将产生 yyyy'年'M'月'。在我看来,不可能使用 Java 的 DateFormat 标准来实现这一点,因为额外的字符()不似乎映射到相应的字段,但对于格式化程序来说只是没有其他语义的字符。

我查看了 DateFormatSymbolsLocaleServiceProvider,但认为它没有帮助。对我来说,扩展点是向 getInstance(int style) 方法添加另一种日期样式。但是如果不为所有语言环境实现它似乎是不可能的...

这个分析正确吗?如何以干净的方式实现这种格式化?

最佳答案

我认为在 zh-CN 语言环境中年月格式不存在任何预定义常量,因此您必须对其进行格式化。

  new SimpleDateFormat("yyyy年M月").format(date)

正如 SimpleDateFormat 所说(由我突出显示):

Date and time formats are specified by date and time pattern strings. Within date and time pattern strings, unquoted letters from 'A' to 'Z' and from 'a' to 'z' are interpreted as pattern letters representing the components of a date or time string. Text can be quoted using single quotes (') to avoid interpretation. "''" represents a single quote. All other characters are not interpreted; they're simply copied into the output string during formatting or matched against the input string during parsing.

因此,以这种方式将中文字符放入格式字符串中是安全的。

由于 Java 是 Unicode,所以只要使用 unicode 源字符集进行编译,就可以在源代码中内联字符。否则你应该从外部读取这个字符串,例如来自某些 Unicode 属性文件或数据库。

关于java - 如何在 Java 中提取特定于语言环境格式的日期字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14932874/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com