我有以下功能
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
这里有什么问题?
答案 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。