Java/Android - 将 GMT 时间字符串转换为本地时间

2022-09-03 18:03:35

好的,所以我有一个字符串,说“星期二五月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);
    }
}

答案 1

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

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);
    }
}

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


答案 2

用于分析的格式化程序必须定义为所需的格式。下面是一个适用于您提供的值的示例,但是您可能需要根据某些边缘情况对输入的作用方式对其进行更改:

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));