2013-07-25 53 views
3

我想将字符串转换为日期...但返回值是错误的。字符串到日期的转换返回错误的值

String startDate = "2013-07-24"; 
Date date = new Date(); 
try{   
    DateFormat formatter = new SimpleDateFormat("yyyy-MM-DD"); 
    date = (Date)formatter.parse(startDate); 
    System.out.println(date);  
} 
catch(Exception e){ 
    e.printStackTrace(); 
} 

所需的输出是:

周四年07月25日00:00:00 CDT 2013

但实际产量为:

周五00年1月25日:00:00 CST 2013

月份从7月份变成了1月份?

+2

它返回了正确的值。你有错误的期望。 –

回答

6

将dd更改为dd;

DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); 
+0

谢谢。有效! – Arun

10

一个问题我看到的是:

DateFormat formatter = new SimpleDateFormat("yyyy-MM-DD"); 

应该是:

DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); 

DD代表日在一年。请阅读此文件以获取有关SimpleDateFormat的更多信息。

+0

谢谢。有效! – Arun

+0

@阿伦:不客气。祝你好运! – kosa

1

月日由使用小写字母 'd' ,并且你正在使用它大写...

将其更改为:

DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); 

它会工作

+0

谢谢。有效! – Arun

1

现代答案:

String startDate = "2013-07-24"; 
    try { 
     LocalDate date = LocalDate.parse(startDate); 
     System.out.println(date); 
    } catch (DateTimeParseException dtpe) { 
     System.out.println(dtpe.getMessage()); 
    } 

它输出与输入字符串:

2013-07-24 

你的字符串符合ISO 8601.这就是现代Java日期&时间API被称为java.time或JSR-310本机“理解”,因此不需要明确的格式化程序。这也是类的toString方法通常产生的,这就是为什么你得到相同的输出。如果您希望以不同的格式输出,请使用DateTimeFormatter

我建议离开过时的SimpleDateFormat和朋友一个人。你真正要求的是7月份的一个日期,也是一年中的第24天。显然没有这样的日期存在,并且SimpleDateFormat通常会给你一些日期,假装一切都很好。我无法计算Stack Overflow的问题,这些问题来自过时类的这种令人惊讶的行为。现代的API非常适合与您一起工作,并且在您犯错时告诉您更多的努力(我们显然都是这样做的)。