Java 使用SimpleDataFormat将一个日期格式转换为另一个日期格式,而不使用外部库

Java 使用SimpleDataFormat将一个日期格式转换为另一个日期格式,而不使用外部库,java,regex,datetime,Java,Regex,Datetime,我试图让下面的代码位同时处理两个输入字符串。它适用于没有破折号的版本(这是SimpleDateFormat的限制)。我得到了第二个输入的ParseExceptionJodaTime是相关帖子中的一个建议,但是,我不能使用它,我使用的是Java6。不过,我希望避免使用正则表达式解决方案,对于我所用的格式,一个简单的解决方案可以同时适用于两个字符串。我现在要开车回家,几个小时后再看看这个,看看我发现的最新情况 import java.text.DateFormat; import java.text

我试图让下面的代码位同时处理两个输入
字符串
。它适用于没有破折号的版本(这是
SimpleDateFormat
的限制)。我得到了第二个输入的
ParseException
JodaTime
是相关帖子中的一个建议,但是,我不能使用它,我使用的是Java6。不过,我希望避免使用正则表达式解决方案,对于我所用的格式,一个简单的解决方案可以同时适用于两个字符串。我现在要开车回家,几个小时后再看看这个,看看我发现的最新情况

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

public class testcc {

    public static void main(String[] args) {
        String input = "Wed Jul 02 00:00:00 EDT 2014";
//      String input = "Wed Jul 02 00:00:00 GMT-400 2014";
        DateFormat df = new SimpleDateFormat("EEE MMM dd kk:mm:ss z yyyy");
        Date date = null;
        try {
            date = df.parse(input);
        } catch (java.text.ParseException e) {
            e.printStackTrace();
        }
        DateFormat dfTarget = new SimpleDateFormat("dd-MMM-yyy");
        System.out.println(dfTarget.format(date));


    }

}

很可能是日期
字符串
(GWT扩展小部件)的源在
SimpleDataFormat
的上下文中错误地返回了它。也就是说,由于
z
需要冒号(
GMT-4:00
),因此没有冒号将失败。我最终得到了这样愚蠢的结果:

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class testcc {

    public static void main(String[] args) {
        // String input = "Wed Jul 02 00:00:00 PST 2014";
        String input = "Wed Jul 02 12:00:00 GMT-400 2014";
        int pos = input.indexOf('-');
        if (pos == -1)
            pos = input.indexOf('+');
        if (pos != -1) {
            input = input.substring(0, pos + 2) + ":"
                    + input.substring(pos + 2, input.length());
        }

        DateFormat df = new SimpleDateFormat("EEE MMM d kk:mm:ss z yyyy", Locale.ENGLISH);
        Date date = null;
        try {
            date = df.parse(input);
        } catch (java.text.ParseException e) {
            e.printStackTrace();
        }
        DateFormat dfTarget = new SimpleDateFormat("dd-MMM-yyy");
        System.out.println(dfTarget.format(date));
    }
}

如果字符串总是:
“Wed Jul 02 12:00:00 GMT-400 2014”
“Wed Jul 02 12:00:00 EST 2014”
“Wed Jul 02 12:00 PST 2014”
,诸如此类?

“它适用于没有分号的情况”
——你的分号是什么意思?为什么会有奇怪的输入:
import com.google.gwt.thirdparty.streamhtmlparser.ParseException?我是说破折号。这是错误的例外。编辑的问题反映了这一点。您不能使用
“Wed Jul 02 00:00:00 GMT-400 2014”。replaceAll(“[\-]”,“”)?不,用空格替换它不起作用。