沒有問題
你的代碼工作*如果趕上例外,因爲定向在correct answer。
String input = "Tue Nov 5 00:00:00 UTC+0530 2013";
java.text.SimpleDateFormat sdformatter = new java.text.SimpleDateFormat("EEE MMM d HH:mm:ss zZ yyyy" , Locale.ENGLISH);
java.util.Date date = null;
try {
date = sdformatter.parse(input);
} catch (ParseException ex) {
System.out.println("ERROR: " + ex); // … handle exception
}
System.out.println("date: " + date + " (adjusted to Kolkata time via Joda-Time: " + new DateTime(date , DateTimeZone.forID("Asia/Kolkata")));
運行時。
date: Mon Nov 04 10:30:00 PST 2013 (adjusted to Kolkata time via Joda-Time: 2013-11-05T00:00:00.000+05:30
喬達時間
這同一格式Joda-Time 2.5工作。
與Java捆綁在一起的java.util.Date/.Calendar/java.text.SimpleDateFormat類是衆所周知的麻煩,混亂和缺陷。避免它們。使用Joda-Time或Java 8中內置的新Java時間包(受Joda-Time啓發)。
String input = "Tue Nov 5 00:00:00 UTC+0530 2013";
DateTimeFormatter formatter = DateTimeFormat.forPattern("EEE MMM d HH:mm:ss zZ yyyy");
DateTime dateTime = formatter.parseDateTime(input).withZone(DateTimeZone.forID("Asia/Kolkata"));
System.out.println("dateTime: " + dateTime);
運行時。
dateTime: 2013-11-05T00:00:00.000+05:30
備用格式
在你的情況,你可以不理會UTC
,因爲它是多餘的偏移量(+0530
)。偏移量假定爲UTC。您可以使用引號來忽略字符。
DateTimeFormatter formatter = DateTimeFormat.forPattern("EEE MMM d HH:mm:ss 'UTC'Z yyyy");
*您的代碼工作我使用Java 8更新25。早期版本的java.text.SimpleDateFormat具有Z字母和偏移量的不同行爲。但是,再次,你甚至不應該使用SimpleDateFormat。
您正在收到*編譯時*錯誤。這不取決於你使用的格式。這只是說你的源代碼無效 - 'SimpleDateFormat.parse'可以拋出'ParseException',你既沒有捕獲它,也沒有聲明它可以被拋出。 – 2014-11-06 13:49:03
請注意,打印出'Date'並不會有太大的幫助 - 您需要將「SimpleDateFormat」與您的「目標」格式一起使用。 – 2014-11-06 13:49:40
我的壞!我忘了添加try catch塊。感謝您的發現。 – Freakyuser 2014-11-06 14:02:47