SimpleDateFormat中的印度尼西亚时报

时间:2015-03-02 10:11:32

标签: 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

任何解决方案?

1 个答案:

答案 0 :(得分:1)

首先要注意:类名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