如何在java中解析格式化的字符串日期到日期对象

时间:2015-11-22 12:31:04

标签: java date date-format simpledateformat

我试图解析格式化的字符串日期,得到解析错误
输入日期为" 11月11日星期三14:24:46 IST 2015",需要输出日期为" 2015年11月11日星期三14:24:46 IST"

noip2

获取错误为java.text.ParseException:无法解析日期:" Wed Nov 11 2015 14:24:46 IST"

1 个答案:

答案 0 :(得分:1)

我已经更新了我的答案,就像您的问题/评论中提到的那样进行解析。见下面的解释:

"Wed Nov 11 14:24:46 IST 2015"

以下

"Wed Nov 11 2015 14:24:46 IST"

我设置了两个SimpleDateFormat对象,如下所示

SimpleDateFormat sourceFormat, destinationFormat;

//this is to format the string to Date object
sourceFormat = new SimpleDateFormat("EEE MMM d kk:mm:ss zzz yyyy", Locale.US);
//this is to format the Date object to desired pattern
destinationFormat = new SimpleDateFormat("EEE MMM d yyyy kk:mm:ss zzz", Locale.US);

然后我将时区设置如下

TimeZone istTimeZone = TimeZone.getTimeZone("Asia/Kolkata");

sourceFormat.setTimeZone(istTimeZone);
destinationFormat.setTimeZone(istTimeZone);

我使用sourceFormat对象将日期字符串格式化为Date对象,如下所示:

Date sourceDate = sourceFormat.parse(target);
//output: Wed Nov 11 08:54:46 GMT 2015

然后我使用目标格式来格式化表示字符串的日期对象,如下所示:

Date destinationDate = destinationFormat.format(d);
//output: Wed Nov 11 2015 14:24:46 IST

基本上为了获得合法的Date对象,我必须使用第一个SimpleDateFormat sourceFormat,它包含在String中映射日期的模式。一旦使用String创建了一个合法的Date对象,那么我使用第二个格式化器来重新格式化Date对象。下面是完整的代码,如果复制/粘贴应该给出输出。

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;

public class ParseDate {
    public static void main(String[] args) {
        try {
            String target = "Wed Nov 11 14:24:46 IST 2015";
            SimpleDateFormat sourceFormat, destinationFormat;

            sourceFormat = new SimpleDateFormat("EEE MMM d kk:mm:ss zzz yyyy", Locale.US);
            destinationFormat = new SimpleDateFormat("EEE MMM d yyyy kk:mm:ss zzz", Locale.US);

            TimeZone istTimeZone = TimeZone.getTimeZone("Asia/Kolkata");

            sourceFormat.setTimeZone(istTimeZone);
            destinationFormat.setTimeZone(istTimeZone);

            Date d = sourceFormat.parse(target);
            System.out.println(d.toString());
            //output: Wed Nov 11 08:54:46 GMT 2015

            System.out.println(destinationFormat.format(d));
            //output: Wed Nov 11 2015 14:24:46 IST

        } catch (ParseException pe) {
            pe.printStackTrace();
        }
    }
}