14

好的,所以我有一个字符串,比如“Tue May 21 14:32:00 GMT 2012”我想将此字符串转换为当地时间,格式为 2012 年 5 月 21 日下午 2:32。我尝试了 SimpleDateFormat("MM dd, yyyy hh:mm a").parse(),但它引发了异常。所以我该怎么做?

异常是“未报告的异常 java.text.ParseException;必须被捕获或声明为抛出”。

在行中Date date = inputFormat.parse(inputText);

我在 TextMate 上运行的代码:

public class test{
    public static void main(String arg[]) {
        String inputText = "Tue May 22 14:52:00 GMT 2012";
        SimpleDateFormat inputFormat = new SimpleDateFormat(
            "EEE MMM dd HH:mm:ss 'GMT' yyyy", Locale.US);
        inputFormat.setTimeZone(TimeZone.getTimeZone("Etc/UTC"));
        SimpleDateFormat out = new SimpleDateFormat("MMM dd, yyyy h:mm a");
        Date date = inputFormat.parse(inputText);
        String output = out.format(date);
       System.out.println(output);
    }
}
4

4 回答 4

26

您为解析提供的格式字符串与您实际获得的文本格式不对应。你需要先解析,然后格式化。看起来你想要:

SimpleDateFormat inputFormat = new SimpleDateFormat(
    "EEE MMM dd HH:mm:ss 'GMT' yyyy", Locale.US);
inputFormat.setTimeZone(TimeZone.getTimeZone("Etc/UTC"));

SimpleDateFormat outputFormat = new SimpleDateFormat("MMM dd, yyyy h:mm a");
// Adjust locale and zone appropriately

Date date = inputFormat.parse(inputText);
String outputText = outputFormat.format(date);

编辑:这是一个简短但完整的程序形式的相同代码,您的示例输入:

import java.util.*;
import java.text.*;

public class Test {
    public static void main(String[] args) throws ParseException {
        String inputText = "Tue May 21 14:32:00 GMT 2012";
        SimpleDateFormat inputFormat = new SimpleDateFormat
            ("EEE MMM dd HH:mm:ss 'GMT' yyyy", Locale.US);
        inputFormat.setTimeZone(TimeZone.getTimeZone("Etc/UTC"));

        SimpleDateFormat outputFormat =
            new SimpleDateFormat("MMM dd, yyyy h:mm a");
        // Adjust locale and zone appropriately
        Date date = inputFormat.parse(inputText);
        String outputText = outputFormat.format(date);
        System.out.println(outputText);
    }
}

你能编译并运行那个确切的代码吗?

于 2012-05-23T17:54:22.210 回答
3

您用来解析的格式化程序必须定义为您期望的格式。这是一个适用于您提供的值的示例,但是您可能需要根据某些极端情况对输入的作用进行更改:

String date = "Tue May 21 14:32:00 GMT 2012";
DateFormat inputFormat = new SimpleDateFormat("EE MMM dd HH:mm:ss zz yyy");
Date d = inputFormat.parse(date);
DateFormat outputFormat = new SimpleDateFormat("MMM dd, yyy h:mm a zz");
System.out.println(outputFormat.format(d));
于 2012-05-23T18:05:01.410 回答
1

SimpleDateFormat.parse 方法引发解析异常。

你得到的例外是告诉你这个......

异常是“未报告的异常 java.text.ParseException;必须被捕获或声明为抛出。

用 try-catch 换行进行解析,你应该是金色的..

Date d=null;
try{
    d = inputFormat.parse(date);
catch(ParseException e){
   // handle the error here....
}

R

于 2012-05-23T19:54:34.023 回答
1
于 2016-08-23T21:21:04.180 回答