如何在Android中使用区域设置格式化日期

时间:2016-05-23 04:12:16

标签: android date locale

我正在使用SimpleDateFormat格式化我的日期" dd Mmm yyy"格式,但我希望Mmm被翻译成马来语。我使用下面的代码来执行此操作但无法获得预期的结果。

SimpleDateFormat sdf = new SimpleDateFormat(format,new Locale("ms","MY"));
return sdf.format(date);

7 个答案:

答案 0 :(得分:3)

您应该尝试这种方式格式化区域设置日期:

DateFormat f = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, Locale.getDefault());
String formattedDate = f.format(new Date());
System.out.println("Date: " + formattedDate);

我希望这会奏效。参考链接:Localized date format in Java

答案 1 :(得分:3)

java.time

您正在使用旧的日期时间类,这些类已被证明设计糟糕,令人困惑且麻烦。它们已被Java 8及更高版本中内置的java.time类取代。由JSR 310定义。大部分功能已经反向移植到Java 6& ThreeTen-Backport项目中的7,并在ThreeTenABP project中进一步适应Android。

如果您有一个java.util.Date对象,请将其转换为Instant对象,时间轴上的UTC时刻,分辨率为纳秒。旧类中添加了新方法以便于转换。

Instant instant = myJavaUtilDate.toInstant();

或者获取当前时刻。在Java 8中,尽管Instant类的容量为纳秒,但仅以毫秒分辨率捕获当前时刻。在Java 9中,当前时刻以高达纳秒的分辨率捕获(取决于您的计算机硬件时钟能力)。

Instant instant = Instant.now();

为您想要查看其挂钟时间的地点应用时区。这对于仅限日期的值很重要,因为日期在任何给定时刻都在世界各地变化。新的一天在东部早些时候开始。

我随意选择新西兰时区进行示范。应用ZoneId获取ZonedDateTime对象。

使用proper time zone names,绝不会使用您在媒体中看到的3-4个字母代码,例如ISTEST。这些代码不是标准化的,甚至也不是唯一的。

ZoneId zoneId = ZoneId.of( "Pacific/Auckland" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );

时区与马来语等人类语言的本地化无关。 Locale处理,以及定义用于排序元素或使用句点与逗号等问题的文化规范。

我的例子假设你指定语言和国家/文化代码是正确的。

Locale locale = new Locale( "ms" , "MY" );

java.time.format包具有可在生成表示java.time值的String时自动本地化的类。

DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDate( FormatStyle.MEDIUM );

定义格式化程序时,请记住指定Locale。如果省略,则将隐式应用JVM的当前默认Locale。即使在运行时,该默认值也可随时更改!最好永远明确。

formatter = formatter.withLocale( locale );
String output = zdt.format( formatter );
  

23 Mei 2016

使用Locale.US时的比较:

  

2016年5月23日

使用Locale.CANADA_FRENCH时:

  

2016年5月23日

答案 2 :(得分:0)

你需要这样做;

修改1:

DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, new Locale("ms","MY"));
String formattedDate = dateFormat.format(new Date());

希望这会对你有所帮助。

答案 3 :(得分:0)

我不确定下面的代码是否适合你,它用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

答案 4 :(得分:0)

如果您希望将日期格式化为设备区域设置,请使用以下代码

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());

答案 5 :(得分:0)

我没有正确设置新的Locale构造函数来处理马来语支持。

String format = "MMM dd yyyy"
SimpleDateFormat sdf = new SimpleDateFormat(format, new Locale("ms","MY","MY"));
return sdf.format(date);

答案 6 :(得分:0)

这段代码解决了我的问题并得到了孟加拉语的结果。

val local = Locale("bn")
val dateFormat = DateFormat.getDateInstance(DateFormat.FULL, local)
val stringDate = dateFormat.format(date)
Log.e("", stringDate)

输出为:

<块引用>

মঙ্গলবার、২৩ফেব্রুয়ারী、২০২১