基于区域设置的 SimpleDateFormat 模式,但强制使用 4 位数年份
我需要建立一个日期格式,如dd/MM/yyyy
。它几乎类似于 DateFormat.SHORT
,但包含 4 个年份数字。
我尝试使用
new SimpleDateFormat("dd//MM/yyyy", locale).format(date);
但是对于美国区域设置来实现它,格式是错误的。
是否有一种常见的方法来格式化日期,以根据区域设置更改模式?
谢谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我会这样做:
使用 FieldPosition,您实际上不必关心日期的格式是否包含年份“yy”或“yyyy”、年份结束的位置甚至使用哪种分隔符。
您只需使用年份字段的开始和结束索引,并始终将其替换为 4 位数的年份值即可。
I would do it like this:
Using a FieldPosition you don't really have to care about wheter the format of the date includes the year as "yy" or "yyyy", where the year ends up or even which kind of separators are used.
You just use the begin and end index of the year field and always replace it with the 4 digit year value and that's it.
java.time
这是现代的答案。恕我直言,现在没有人应该与早已过时的
DateFormat
和SimpleDateFormat
类作斗争。他们的替代品出现在现代 Java date & 中。 time API 于 2014 年初推出,java.time 类。我只是将Happier的答案中的想法应用到现代课程中。
DateTimeFormatterBuilder.getLocalizedDateTimePattern
方法生成区域设置
。我们操纵生成的模式字符串来强制使用 4 位数年份。输出示例:
Locale.US
:7/18/2017
。英国
、法国
、德国
和意大利
:18/07/2017
。DateTimeFormatterBuilder
允许我们直接获取本地化的格式模式字符串,而无需先获取格式化程序,这在这里很方便。getLocalizedDateTimePattern()
的第一个参数是日期格式样式。null
作为第二个参数表示我们不希望包含任何时间格式。在我的测试中,我使用了LocalDate
作为date
,但该代码也应该适用于其他现代日期类型(LocalDateTime
、OffsetDateTime
和ZonedDateTime
)。java.time
Here’s the modern answer. IMHO these days no one should struggle with the long outdated
DateFormat
andSimpleDateFormat
classes. Their replacement came out in the modern Java date & time API early in 2014, the java.time classes.I am just applying the idea from Happier’s answer to the modern classes.
The
DateTimeFormatterBuilder.getLocalizedDateTimePattern
method generates a formatting pattern for date and time styles for aLocale
. We manipulate the resulting pattern string to force the 4-digit year.Example output:
Locale.US
:7/18/2017
.UK
,FRANCE
,GERMANY
andITALY
:18/07/2017
.DateTimeFormatterBuilder
allows us to get the localized format pattern string directly, without getting a formatter first, that’s convenient here. The first argument togetLocalizedDateTimePattern()
is the date format style.null
as second argument indicates that we don’t want any time format included. In my test I used aLocalDate
fordate
, but the code should work for the other modern date types too (LocalDateTime
,OffsetDateTime
andZonedDateTime
).我有类似的方法来做到这一点,但我需要获取 ui 控制器的区域设置模式。
所以这是代码
I have similar way to do this, but I need to get the locale pattern for the ui controller.
So here's the code
你不能只使用 java.text.DateFormat 类吗?
那应该做你想做的事。
Can you not just use java.text.DateFormat class ?
That should do what you want to do.