使用SimpleDateFormat将一种日期格式转换为另一种日期格式,而不使用外部lib

时间:2014-07-02 22:13:46

标签: java regex datetime

我尝试使用以下位代码来处理输入Strings。它适用于没有破折号的人(这是SimpleDateFormat的限制)。我得到ParseException作为第二个输入。 JodaTime一直是相关帖子中的一个建议,但是,我无法使用它,而且我使用的是Java 6.我想避免使用正则表达式解决方案,但这是一个简单的解决方案。我有的格式适用于两个字符串。我现在要开车回家,并在几个小时内再次检查,并对我发现的内容进行更新。

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


    }

}

1 个答案:

答案 0 :(得分:0)

日期String(GWT扩展小部件)的来源可能会在SimpleDateFormat的上下文中错误地返回。也就是说,因为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:00 PST 2014"等等?