2010-11-01 182 views
2

我试图将字符串格式化为日期。如何将日期字符串格式化为期望的日期格式

为此,我已经写了代码: -

Calendar cal = Calendar.getInstance(); 
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); 
System.out.println(sdf.format(cal.getTime())); 

这是很好.. 但现在我想将字符串转换成格式化像上面的日期.. 例如

String dt="2010-10-22"; 

和输出应该是这样的: - 2010-10-22T00:00:00

我该怎么办呢?

+1

你有没有尝试在看看其他答案在stackoverflow?例如http://stackoverflow.com/questions/3487898/how-to-parse-follow-date-in-java – 2010-11-01 08:40:33

回答

5
String dt = "2010-10-22"; 

SimpleDateFormat sdfIn = new SimpleDateFormat("yyyy-MM-dd"); 
ParsePosition ps = new ParsePosition(0) 
Date date = sdfIn.parse(dt, pos) 

SimpleDateFormat sdfOut = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); 

System.out.println(sdfOut.format(date)); 
+0

感谢它的工作... – 2010-11-01 08:50:06

+1

你不需要'新的ParsePosition(0)'。只需调用'sdfIn。解析(dt)',它默认为第一个位置。 – 2010-11-01 14:49:59

2

这应该为你做,记得把它包在一个try-catch块以防万一。

DateFormat dt = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); 
try 
{ 
Date today = dt.parse("2010-10-22T00:00:00");      
System.out.println("Your Date = " + dt.format(today));  
} catch (ParseException e)  
{ 
//This parse operation may not be successful, in which case you should handle the ParseException that gets thrown. 
//Black Magic Goes Here 
} 
+0

“以防万一”是什么?我不喜欢通过打印堆栈跟踪来“处理”异常的代码示例,因为它们似乎可以正常工作,但完全消除了解决方案中非常重要的一部分。最好不要编写catch块,至少编译器会强制用户**想**关于如何处理异常。为此,我宁愿你的回答提到可以抛出ParseException,并且应该适当地处理*。 – 2010-11-01 08:47:25

+0

感谢您的回答,但我认为大卫的回答更好 – 2010-11-01 08:50:53

+0

我很高兴您找到您的答案!在代码片段中打印堆栈跟踪时,我没有发现任何固有的危险。上帝怜悯任何直接从互联网复制代码并逐字部署的开发人员。跟踪是在那里,以便开发人员停下来思考,但也有一个开始找出问题的出发点。如果您需要编译器来强制开发人员查看他的代码,那么出现严重错误。当然只是我的意见! – JonVD 2010-11-01 08:56:22

0

您使用日期的格式化输出相同的类也可以用来分析输入的日期。

要使用例如,解析样品日期(即小时,分钟等)

String dt = "2010-10-22"; 
SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd"); 
System.out.println(dateFormatter.parse(dt)); 

未指定的字段将是0。因此,您可以使用相同的代码格式化输出日期。

1

如果你的输入将是ISO,你也可以看看使用的Joda Time API,像这样:

LocalDateTime localDateTime = new LocalDateTime("2010-10-22"); 
System.out.println("Formatted time: " + localDateTime.toString()); 
+0

谢谢它真的会采用ISO格式 – 2010-11-01 09:06:16