2013-04-26 73 views
2

我想解析一个字符串格式为“星期一,5月15日下午1:00”到一个日期时间,以便我可以输入到数据库中。然而,当我测试这个时,解析不会返回正确的一天。有没有人有任何想法发生了什么?Java SimpleDateFormat解析返回错误的日子

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

public class App 
{ 
    public static void main(String[] args) throws ParseException 
    { 

     String inDateTime = "Monday, May 15 at 1:00 PM"; 

     Date date = new SimpleDateFormat("EEE, MMM dd 'at' hh:mm aa").parse(inDateTime); 

     String outDateTime = new SimpleDateFormat("EEEEEE MMMMMM dd hh:mm aa").format(date); 

     System.out.println(outDateTime); 

    } 
} 

而且从NetBeans中

[exec:exec] 
Friday May 15 01:00 PM 

为什么周一正在变成周五任何想法的输出?

回答

3

你没有设置年,所以SimpleDateFormat正在使用从时代的一个。 1970年5月15日发生在周五。

如果存在月份和日期字段,则会忽略日期输入字段,因此可以省略该字段。

您需要指定一个星期一发生在5月15日的年份。

+0

谢谢你,我会人为地在今年字符串的开头添加,使其工作,我会接受的格式它不包括年份。 – Ergosphere 2013-04-26 21:49:36

0

代码等同放着清单

String inDateTime = "1970 Monday, May 15 at 1:00 PM"; 

    Date date = new SimpleDateFormat("yyyy EEE, MMM dd 'at' hh:mm aa") 
       .parse(inDateTime); 

String outDateTime = new SimpleDateFormat("EEEEEE MMMMMM dd hh:mm aa") 
       .format(date); 

    System.out.println(outDateTime); //prints Friday May 15 01:00 PM 

所以,请加year

+0

谢谢,我会在一年中人为地添加到字符串的开头使其工作,我将在其中收到的格式不包括年份。 – Ergosphere 2013-04-26 21:48:04

+0

Ok.no问题帮助。将其标记为答案,如果有帮助,请点击标记。 – 2013-04-27 04:42:48