无法解析Java Date Object?

时间:2014-09-15 03:37:12

标签: java date

我收到的Java日期格式如此:"Sun Sep 14 02:00:00 PDT 2014"yyyy-MM-dd格式,但我似乎无法解析它。我尝试的是以下内容:

String time = "Sun Sep 14 02:00:00 PDT 2014";
SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");
Date contractEffectiveDateFormat = f.parse(time);
System.out.println("Date: " + contractEffectiveDateFormat);

但是,我收到一条错误消息,说明这个日期是不可解决的。我不知道如何解析这个日期,因为如果我尝试使用以下内容解析日期:

DateFormat df = new SimpleDateFormat("EEE MMM dd kk:mm:ss z yyyy"); 

这是如何将日期正确解析为Date对象, 字符串会变成Date对象,但我似乎无法从那里做任何事情。我想把它打开,看起来像2014-09-14。关于如何做的任何想法?谢谢!

3 个答案:

答案 0 :(得分:3)

使用两个DateFormat(s)作为输入和输出,

String time = "Sun Sep 14 02:00:00 PDT 2014";
DateFormat out = new SimpleDateFormat("yyyy-MM-dd");
DateFormat in = new SimpleDateFormat("EEE MMM dd kk:mm:ss z yyyy");
try {
    Date effectiveDate = in.parse(time);
    System.out.println("Date: " + out.format(effectiveDate));
} catch (ParseException e) {
    e.printStackTrace();
}

输出是请求的

Date: 2014-09-14

答案 1 :(得分:3)

您的传入字符串是String time = "Sun Sep 14 02:00:00 PDT 2014"; 这意味着SimpleDateFormat模式应该与传入的String模式匹配,因此您需要像这样使用SimpleDateFormat

DateFormat inFormat=new SimpleDateFormat("EEE MMM dd kk:mm:ss z yyyy",Locale.ENGLISH);

然后当您在inFormat上调用parse()时,它将为您提供Date对象,该对象没有与之关联的特定格式。因此,为了再次格式化Date,您需要创建SimpleDateFormat对象,指定您想要的格式

DateFormat outFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);

最终将所有人绑在一起

还有一件事总是指定 区域设置

String time = "Sun Sep 14 02:00:00 PDT 2014";
DateFormat outFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
// good practice to specify the locale
DateFormat inFormat=new SimpleDateFormat("EEE MMM dd kk:mm:ss z yyyy",Locale.ENGLISH);
try {
    Date parsedDate = inFormat.parse(time);
    System.out.println("Required Formatted Date: " + outFormat.format(effectiveDate));
} catch (ParseException e) {
    e.printStackTrace();
}

答案 2 :(得分:2)

只需添加另一个SimpleDateFormat即可让您按照自己的方式展示Date对象:

public static void main(String[] args) throws ParseException {
    String time = "Sun Sep 14 02:00:00 PDT 2014";
    DateFormat df = new SimpleDateFormat("EEE MMM dd kk:mm:ss z yyyy");
    Date contractEffectiveDateFormat = df.parse(time);
    System.out.println("Date: " + contractEffectiveDateFormat);

    SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");
    System.out.println(f.format(contractEffectiveDateFormat)); // prints 2014-09-14
}