我使用java.text.SimpleDateFormat尝试了许多不同类型的解决方案,但无法完全正确。
我收到的输入字符串是Tue Nov 5 00:00:00 UTC+0530 2013
我想要的格式是dd-MMM-yy
以下是我使用的代码:
SimpleDateFormat formatter = new SimpleDateFormat("EEE MMM d HH:mm:ss zZ yyyy", Locale.ENGLISH);
date = formatter.parse(s);
System.out.println(date);
我收到了error: unreported exception ParseException; must be caught or declared to be thrown
date = formatter.parse(s);
我在格式上尝试了很多更改,但仍然收到此错误。谁能告诉我正在传递的字符串的确切格式?
答案 0 :(得分:4)
您尚未处理代码中的异常。这就是编译器出错的原因。您需要handle解析期间可能抛出的ParseException。
SimpleDateFormat formatter = new SimpleDateFormat("EEE MMM d HH:mm:ss zZ yyyy", Locale.ENGLISH);
try{
date = formatter.parse(s);
System.out.println(date);
}catch(ParseException ex){
//exception
ex.printStackTrace();
}
或者您可以在方法中添加throws ParseException
。
根据您的评论,似乎您正在尝试将日期[字符串]转换为其他格式。如果我是正确的,那么以下示例可能会对您有所帮助。
String inputstring="Tue Nov 5 00:00:00 UTC+0530 2013";
SimpleDateFormat formatter = new SimpleDateFormat("EEE MMM d HH:mm:ss zZ yyyy", Locale.ENGLISH);
DateFormat outformat = new SimpleDateFormat("dd-MMM-yy");
try {
String result = outformat.format(formatter.parse(inputstring));
System.out.println(result);
} catch (ParseException ex) {
ex.printStackTrace();
}
输出:
04-Nov-13
答案 1 :(得分:0)
如果按照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.time包(受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 Update 25.早期版本的java.text.SimpleDateFormat具有不同的Z字母和偏移行为。但是,你甚至不应该使用SimpleDateFormat。