如何在 Android 中使用语言环境格式化日期
How can I format Date with Locale in Android
我正在使用 SimpleDateFormat 来格式化我的日期 "dd Mmm yyy" 格式,但我希望将 Mmm 翻译成马来语。我正在使用下面的代码来这样做,但无法获得预期的结果。
SimpleDateFormat sdf = new SimpleDateFormat(format,new Locale("ms","MY"));
return sdf.format(date);
你需要这样做;
编辑 1:
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, new Locale("ms","MY"));
String formattedDate = dateFormat.format(new Date());
希望对您有所帮助。
我不确定下面的代码是否适合你,它是用 Scala 编写的,它在 Java 中几乎相同。
val malaysia = new Locale("ms","MY","MY")
val cal = Calendar.getInstance(malaysia)
val df = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL, malaysia)
println(df.format(cal.getTime()))
以上代码的结果是
Isnin 23 Mei 2016 9:55:44 AM IST
您应该尝试使用这种方式来格式化语言环境日期:
DateFormat f = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, Locale.getDefault());
String formattedDate = f.format(new Date());
System.out.println("Date: " + formattedDate);
我希望这会奏效。参考link:Localized date format in Java
如果您希望将日期格式化为设备区域设置,请使用以下代码
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date newDate = format.parse(strDate2);
long milliDate = newDate.getTime()+getCurrentTimezoneOffset();
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(milliDate);
return format.format(cal.getTime());
java.time
您使用的是旧的日期时间 classes,它们已被证明设计不佳、令人困惑且麻烦。它们已被 java.time classes built into Java 8 and later. Defined by JSR 310. Much of that functionality has been back-ported to Java 6 & 7 in the ThreeTen-Backport project and further adapted to Android in the ThreeTenABP project.
取代
如果您有一个 java.util.Date 对象,请将其转换为一个 Instant
对象,UTC 时间轴上的一个时刻,分辨率为纳秒。已将新方法添加到旧的 classes 以方便转换。
Instant instant = myJavaUtilDate.toInstant();
或获取当前时刻。在 Java 8 中,当前时刻仅以毫秒分辨率捕获,尽管 Instant
class 的容量为纳秒。在 Java 9 中,当前时刻的捕捉分辨率高达纳秒级(取决于您的计算机硬件时钟能力)。
Instant instant = Instant.now();
为您要查看挂钟时间的地区应用时区。这对于纯日期值也很重要,因为世界各地的日期在任何给定时刻都在变化。新的一天在东方开始了。
我随便选了一个新西兰时区,做示范。应用一个 ZoneId
to get a ZonedDateTime
对象。
使用proper time zone names,永远不要使用您在媒体上看到的3-4 个字母的代码,例如IST
或EST
。这样的代码不是标准化的,甚至不是唯一的。
ZoneId zoneId = ZoneId.of( "Pacific/Auckland" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
时区与本地化为人类语言(例如马来语)无关。 Locale
处理这个问题,并定义文化规范以用于诸如元素排序或使用句号与逗号之类的问题。
我的示例假定您在指定语言和 country/culture 代码方面是正确的。
Locale locale = new Locale( "ms" , "MY" );
java.time.format 包有 classes 可以在生成表示 java.time 值的字符串时自动本地化。
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDate( FormatStyle.MEDIUM );
定义格式化程序时,请记住指定 Locale
。如果省略,将隐式应用 JVM 当前的默认 Locale。该默认值可以随时更改,即使在运行时也是如此!所以最好总是明确。
formatter = formatter.withLocale( locale );
String output = zdt.format( formatter );
23 Mei 2016
使用Locale.US
时对比:
May 23, 2016
并且当使用 Locale.CANADA_FRENCH
时:
2016-05-23
我没有正确设置新的 Locale 构造函数来处理马来语支持。
String format = "MMM dd yyyy"
SimpleDateFormat sdf = new SimpleDateFormat(format, new Locale("ms","MY","MY"));
return sdf.format(date);
这段代码解决了我的问题并得到了孟加拉语的结果。
val local = Locale("bn")
val dateFormat = DateFormat.getDateInstance(DateFormat.FULL, local)
val stringDate = dateFormat.format(date)
Log.e("", stringDate)
输出为:
মঙ্গলবার, ২৩ ফেব্রুয়ারী, ২০২১
我正在使用 SimpleDateFormat 来格式化我的日期 "dd Mmm yyy" 格式,但我希望将 Mmm 翻译成马来语。我正在使用下面的代码来这样做,但无法获得预期的结果。
SimpleDateFormat sdf = new SimpleDateFormat(format,new Locale("ms","MY"));
return sdf.format(date);
你需要这样做;
编辑 1:
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, new Locale("ms","MY"));
String formattedDate = dateFormat.format(new Date());
希望对您有所帮助。
我不确定下面的代码是否适合你,它是用 Scala 编写的,它在 Java 中几乎相同。
val malaysia = new Locale("ms","MY","MY")
val cal = Calendar.getInstance(malaysia)
val df = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL, malaysia)
println(df.format(cal.getTime()))
以上代码的结果是
Isnin 23 Mei 2016 9:55:44 AM IST
您应该尝试使用这种方式来格式化语言环境日期:
DateFormat f = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, Locale.getDefault());
String formattedDate = f.format(new Date());
System.out.println("Date: " + formattedDate);
我希望这会奏效。参考link:Localized date format in Java
如果您希望将日期格式化为设备区域设置,请使用以下代码
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date newDate = format.parse(strDate2);
long milliDate = newDate.getTime()+getCurrentTimezoneOffset();
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(milliDate);
return format.format(cal.getTime());
java.time
您使用的是旧的日期时间 classes,它们已被证明设计不佳、令人困惑且麻烦。它们已被 java.time classes built into Java 8 and later. Defined by JSR 310. Much of that functionality has been back-ported to Java 6 & 7 in the ThreeTen-Backport project and further adapted to Android in the ThreeTenABP project.
取代如果您有一个 java.util.Date 对象,请将其转换为一个 Instant
对象,UTC 时间轴上的一个时刻,分辨率为纳秒。已将新方法添加到旧的 classes 以方便转换。
Instant instant = myJavaUtilDate.toInstant();
或获取当前时刻。在 Java 8 中,当前时刻仅以毫秒分辨率捕获,尽管 Instant
class 的容量为纳秒。在 Java 9 中,当前时刻的捕捉分辨率高达纳秒级(取决于您的计算机硬件时钟能力)。
Instant instant = Instant.now();
为您要查看挂钟时间的地区应用时区。这对于纯日期值也很重要,因为世界各地的日期在任何给定时刻都在变化。新的一天在东方开始了。
我随便选了一个新西兰时区,做示范。应用一个 ZoneId
to get a ZonedDateTime
对象。
使用proper time zone names,永远不要使用您在媒体上看到的3-4 个字母的代码,例如IST
或EST
。这样的代码不是标准化的,甚至不是唯一的。
ZoneId zoneId = ZoneId.of( "Pacific/Auckland" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
时区与本地化为人类语言(例如马来语)无关。 Locale
处理这个问题,并定义文化规范以用于诸如元素排序或使用句号与逗号之类的问题。
我的示例假定您在指定语言和 country/culture 代码方面是正确的。
Locale locale = new Locale( "ms" , "MY" );
java.time.format 包有 classes 可以在生成表示 java.time 值的字符串时自动本地化。
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDate( FormatStyle.MEDIUM );
定义格式化程序时,请记住指定 Locale
。如果省略,将隐式应用 JVM 当前的默认 Locale。该默认值可以随时更改,即使在运行时也是如此!所以最好总是明确。
formatter = formatter.withLocale( locale );
String output = zdt.format( formatter );
23 Mei 2016
使用Locale.US
时对比:
May 23, 2016
并且当使用 Locale.CANADA_FRENCH
时:
2016-05-23
我没有正确设置新的 Locale 构造函数来处理马来语支持。
String format = "MMM dd yyyy"
SimpleDateFormat sdf = new SimpleDateFormat(format, new Locale("ms","MY","MY"));
return sdf.format(date);
这段代码解决了我的问题并得到了孟加拉语的结果。
val local = Locale("bn")
val dateFormat = DateFormat.getDateInstance(DateFormat.FULL, local)
val stringDate = dateFormat.format(date)
Log.e("", stringDate)
输出为:
মঙ্গলবার, ২৩ ফেব্রুয়ারী, ২০২১