我正在使用SimpleDateFormat格式化我的日期" dd Mmm yyy"格式,但我希望Mmm被翻译成马来语。我使用下面的代码来执行此操作但无法获得预期的结果。
SimpleDateFormat sdf = new SimpleDateFormat(format,new Locale("ms","MY"));
return sdf.format(date);
答案 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 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个字母代码,例如IST
或EST
。这些代码不是标准化的,甚至也不是唯一的。
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日
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)
输出为:
<块引用>মঙ্গলবার、২৩ফেব্রুয়ারী、২০২১