在年度价值观的背景下,“aaaa”与“yyyy”有何不同?

时间:2013-10-03 08:15:26

标签: java simpledateformat

参考SimpleDateFormat docs,代表年份的模式字符为y,因此我们有yyyyyy(2013年分别为2013年)等表示形式。没关系。

当我为大多数区域设置输出DEFAULT / SHORT / MEDIUM / LONG / FULL模式时,我会得到以下内容:

(EG:新西兰)

Default: d/MM/yyyy
Short: d/MM/yy
Medium: d/MM/yyyy
Long: d MMMM yyyy
Full: EEEE, d MMMM yyyy

但是看一些地方,例如法国,我明白了:

Default: j MMM aaaa
Short: jj/MM/aa
Medium: j MMM aaaa
Long: j MMMM aaaa
Full: EEEE j MMMM aaaa

显然,这里aaaa代表了一年,但yyyyaaaa之间的意图区别是什么? IE:为什么他们使用aaaa而不是yyyy

最初我认为这可能是法语的一部分,因为“[y] ear”是“[a]nnée”(而“[d] ay”是“[j]我们的”,但我看到它也是aaaa为匈牙利语(以及许多其他语言环境),匈牙利语为“年”是“év”(日“午睡”),因此我认为我所做的“a”/“année”相关性是巧合。

那么应该在这里推断出有什么不同?

我用Google搜索了一下,但画了一个空白。对于Java开发人员而言,它可能显而易见,但我只是一个CFML开发人员,当Java比我在原生CFML中做得更方便时,他偶尔会将Java固定到我的CFML中。如果这是一个愚蠢的问题,那就很抱歉。

1 个答案:

答案 0 :(得分:3)

如果查看java.text.DateFormatSymbols,您会找到以下字段:

/**
 * Localized date-time pattern characters. For example, a locale may
 * wish to use 'u' rather than 'y' to represent years in its date format
 * pattern strings.
 * This string must be exactly 18 characters long, with the index of
 * the characters described by <code>DateFormat.ERA_FIELD</code>,
 * <code>DateFormat.YEAR_FIELD</code>, etc.  Thus, if the string were
 * "Xz...", then localized patterns would use 'X' for era and 'z' for year.
 * @serial
 */
String  localPatternChars = null;

这是一个字符串,包含预定义顺序中每个格式元素的字符(例如,字符0是Era格式字符,字符1是Year格式字符等)。

此字段是从sun.text.resources.FormatData资源包(当然是每个区域设置),从DateTimePatternChars密钥加载的。

如果您检查sun.text.resources.FormatData_fr资源,则会找到键值对{ "DateTimePatternChars", "GaMjkHmsSEDFwWxhKzZ" }

简而言之 - 法国语言环境中的“a”格式字符与美国语言环境中的“y”格式字符具有完全相同的效果,它的调用方式不同。