SimpleDateFormat的印度尼西亚时报



我有一个格式为的日期

Tue Mar 03 00:00:00 WIB 2015

如何将其格式化为:

2015-03-03

我目前尝试的:

val today_date = new LocalDate()
val formatIncoming = new java.text.SimpleDateFormat("EEE MMM dd HH:mm:ss z YYYY")
val formatOutgoing = new java.text.SimpleDateFormat("yyyy-MM-dd")
formatOutgoing.format(formatIncoming.parse(data.cheque_date.toString))
//output
2014-12-30

有什么解决方案吗?

首先要注意:类名LocalDate看起来像Joda Time,但您必须使用SimpleDateFormat,因为Joda Time无法解析时区名称或缩写。

第二:您的解析模式错误,使用YYYY而不是YYYY(Y是周中的年份,而不是正常的日历年)。使用Y可能导致错误的日期输出。

第三:有必要将区域设置指定为英语,因为您的输入中有英语标签(尤其是如果您的默认区域设置不是英语,否则会出现异常)。

第四:模式字母z是正确的,将处理时区名称,如"WIB"。再次强调:在此处指定区域设置很重要。在给出的另一个答案中使用"Z"通常表示时区偏移,但允许根据Javadoc解析时区名称。因此,为了清晰起见,我建议使用"z"(正如您所做的那样)。

SimpleDateFormat formatIncoming =
    new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH);
SimpleDateFormat formatOutgoing = new SimpleDateFormat("yyyy-MM-dd");
TimeZone tz = TimeZone.getTimeZone("Asia/Jakarta");
System.out.println(tz.getDisplayName(false, TimeZone.SHORT, Locale.ENGLISH)); // WIB
formatOutgoing.setTimeZone(tz);
String s = formatOutgoing.format(formatIncoming.parse("Tue Mar 03 00:00:00 WIB 2015"));
System.out.println("Date in Indonesia: " + s); // 2015-03-03

最新更新