如何解析日期?

2022-08-31 06:26:05

我正在尝试解析此日期,但它不起作用:SimpleDateFormat

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

public class Formaterclass {
    public static void main(String[] args) throws ParseException{
        String strDate = "Thu Jun 18 20:56:02 EDT 2009";
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        Date dateStr = formatter.parse(strDate);
        String formattedDate = formatter.format(dateStr);
        System.out.println("yyyy-MM-dd date is ==>"+formattedDate);
        Date date1 = formatter.parse(formattedDate);

        formatter = new SimpleDateFormat("dd-MMM-yyyy");
        formattedDate = formatter.format(date1);
        System.out.println("dd-MMM-yyyy date is ==>"+formattedDate);
    }
}

如果我用strDate=尝试这个代码,我有一个肯定的答案。怎么了?如何解析此格式?"2008-10-14"

PS.我从a获得了此日期,并且没有关于用户选择日期时如何修改日期格式的说明。jDatePicker


答案 1

您不能期望使用使用不同格式设置的简单日期格式来解析日期。

要解析您的“Thu Jun 18 20:56:02 EDT 2009”日期字符串,您需要一个像这样的SimpleDateFormat(大致上):

SimpleDateFormat parser=new SimpleDateFormat("EEE MMM d HH:mm:ss zzz yyyy");

使用此选项将字符串解析为日期,然后使用另一个 SimpleDateFormat 将该日期转换为所需的格式。

        String input = "Thu Jun 18 20:56:02 EDT 2009";
        SimpleDateFormat parser = new SimpleDateFormat("EEE MMM d HH:mm:ss zzz yyyy");
        Date date = parser.parse(input);
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        String formattedDate = formatter.format(date);

        ...

JavaDoc: http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html


答案 2

问题是你有一个日期格式,格式如下:

Thu Jun 18 20:56:02 EDT 2009

但是正在使用一个是:SimpleDateFormat

yyyy-MM-dd

这两种格式不一致。您需要构造一个与尝试解析为 Date 的字符串的布局相匹配的 SimpleDateFormat。将内容排列起来以使其易于查看,您需要这样:SimpleDateFormat

EEE MMM dd HH:mm:ss zzz yyyy
Thu Jun 18 20:56:02 EDT 2009

检查我链接到的JavaDoc页面,看看如何使用这些字符。