格式化日期与时区。格式错误

时间:2014-11-06 13:45:52

标签: java

我使用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);

我在格式上尝试了很多更改,但仍然收到此错误。谁能告诉我正在传递的字符串的确切格式?

2 个答案:

答案 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。