我想获取给定用户语言/国家/地区的当前日期。 E.g:
等...
也许我没有在SO和网络上正确搜索,但我找不到方便的答案......
谢谢!
答案 0 :(得分:0)
您可以像这样使用SimpleDateFormat类传递默认语言环境
SimpleDateFormat dateformat = new SimpleDateFormat(timeFormat, Locale.ENGLISH);
答案 1 :(得分:0)
LocalDate.now( ZoneId.of( "America/Montreal" ) ) // Capture the current date, “today”.
.format( // Generate a string.
DateTimeFormatter.ofLocalizedDate( FormatStyle.FULL ) // Automatically localize.
.withLocale( Locale.CANADA_FRENCH ) // Specify human language for translation and cultural norms for formatting.
)
将ThreeTenABP库添加到您的项目中。该库适用于Android的ThreeTen-Backport项目,后端到Java 6& 7 java.time类的大部分功能。 java.time类内置于Java 8及更高版本中。 java.time类取代了众所周知的麻烦遗留日期时间类,例如Date
和Calendar
。
获取所需/预期时区的当前日期。我建议养成始终明确指定时区的习惯,而不是隐式依赖JVM的当前默认时区。
LocalDate
类表示没有时间且没有时区的仅限日期的值。
时区对于确定日期至关重要。对于任何给定的时刻,日期在全球范围内因地区而异。例如,在Paris France午夜后的几分钟是新的一天,而Montréal Québec中仍然是“昨天”。
以continent/region
的格式指定proper time zone name,例如America/Montreal
,Africa/Casablanca
或Pacific/Auckland
。切勿使用诸如EST
或IST
之类的3-4字母缩写,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。
ZoneId z = ZoneId.of( "America/Montreal" );
LocalDate localDate = LocalDate.now( z );
您可以通过调用ZoneId.systemDefault
来获取JVM当前的默认时区。请记住,当前默认值可以随时由该JVM中任何应用程序的任何线程中的任何代码更改。因此,如果时区很重要,请与用户确认。
生成一个字符串,用DateTimeFormatter
个对象表示该值。您可以指定格式模式。但是你想要一个本地化的值,所以让DateTimeFormatter
做到这一点。
要进行本地化,请指定:
FormatStyle
确定字符串的长度或缩写。 Locale
确定(a)翻译日期名称,月份名称等的人类语言,以及(b)决定缩写,大小写,标点符号,分隔符问题的文化规范等等。
Locale locale = Locale.CANADA_FRENCH; DateTimeFormatter f = DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL).withLocale(locale);
生成你的字符串。
String output = localDate.format( f );
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
答案 2 :(得分:0)
如果您在不使用外部库的情况下在Android 上查找内置方式,那么旧式类java.text.DateFormat
是获得指定格式化程序的格式化程序的最佳起点区域设置,不知道确切的格式模式。请参阅javadoc。
DateFormat df = DateFormat.getDateInstance(DateFormat.LONG, Locale.FRANCE);
String formattedCurrentDate = df.format(new Date());