没有问题
你的代码工作*如果赶上例外,因为定向在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