从Java中的Calendar解析日期

时间:2010-07-14 14:00:32

标签: java parsing date calendar

我有以下功能

public static Date parseDate(String date, String format) throws ParseException
 {
         SimpleDateFormat formatter = new SimpleDateFormat(format);
         return formatter.parse(date);
 }

我在我的代码中使用如下

Calendar eDate = Calendar.getInstance();
eDate.add(Calendar.DAY_OF_MONTH,10);
Date date = null;
  try {
   date = parseDate(eDate.getTime().toString(),"yyyy-MM-dd hh-mm-ss");
  } catch (ParseException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

但它正在抛出 -

 java.text.ParseException: Unparseable date

这里有什么问题?

8 个答案:

答案 0 :(得分:13)

格式未存储在Date中。它存储在String中。 Date#toString()会返回固定格式,该格式在Javadoc中有说明。

目前仅格式化 ,您需要将Date作为String显示给人。

Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_MONTH, 10);
Date date = calendar.getTime();
String formattedDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
System.out.println(formattedDate);

请注意,MM代表月份,mm代表分钟。另请参阅SimpleDateFormat javadoc

答案 1 :(得分:5)

您会很高兴听到从来没有必要从Calendar对象解析日期:从Date中提取Calendar的方法是通过{ {1}}方法。


编辑:

以ISO样式格式输出getTime()中的日期:

eDate

这是未经测试的,但我认为它应该有用。

答案 2 :(得分:1)

您目前使用java.util.Date的默认格式格式化,然后使用可能不同的格式解析。您还应该更改格式字符串 - 它当前使用12小时时钟,没有上午/下午指示符,并且分钟两次。我想你的意思是:“yyyy-MM-dd HH-mm-ss”

答案 3 :(得分:1)

您正在插入Zulu时间戳(UNIX),getTime()返回自January 1, 1970, 00:00:00 GMT以来的毫秒数。然后将格式定义为yyyy-mm-dd hh-mm-ss并尝试使用此模式解析时间戳。哪个不匹配。

您可以使用Date date = calendar.getTime();,然后通过new SimpleDateFormat("yyyy-MM-dd HH-mm-ss").format(date);

对其进行格式化

答案 4 :(得分:1)

不要将toString()用于此类任何事情。 toString()仅应用于调试消息。

使用DateFormat.format(..)以可预测的形式生成字符串。

答案 5 :(得分:0)

您可以简单地使用日历返回的日期,而不是将其转换为字符串并返回日期(显然使用错误的日期格式)。日期可以通过以下方式获得:

eDate.getTime()

在您的情况下似乎不需要SimpleDateFormat。

答案 6 :(得分:0)

检查Date.toString()方法。

api声明它将其返回 格式:

dow mon dd hh:mm:ss zzz yyyy

是:

Mon Jan 28 14:22:07 EST 2004

您告诉解析器期望:2004-01-28 14-22-07

答案 7 :(得分:0)

eDate.getTime().toString()

以此格式返回日期的字符串表示形式:

dow mon dd hh:mm:ss zzz yyyy(请参阅java.util.Date API)。

您正尝试使用以下格式解析日期:

yyyy-mm-dd hh-mm-ss。

代码正确抛出ParseException。