用Java解析日历中的日期
我有以下功能用Java解析日历中的日期,java,parsing,date,calendar,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.getInstan
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
这里有什么问题?您当前正在使用
java.util.Date
中的默认格式进行格式化,然后使用可能不同的格式进行解析。您还应该更改格式字符串-它当前使用的是一个12小时的时钟,没有am/pm指示器,分钟两次。我想您的意思是:“yyyy-MM-dd-HH-MM-ss”您正在插入Zulu时间戳(UNIX),getTime()
返回自1970年1月1日00:00:00 GMT
以来的毫秒数。然后将格式定义为yyyy-mm-dd-hh-mm-ss
,并尝试使用此模式解析时间戳。这不匹配
您可以使用
Date=calendar.getTime()编码>然后通过新的SimpleDataFormat(“yyyy-MM-dd-HH-MM-ss”)对其进行格式化。格式(日期)
您会很高兴听到,不需要从日历
对象中解析日期:从日历
中提取日期的方法是通过getTime()
方法
编辑:
要以ISO样式格式在eDate
中输出日期,请执行以下操作:
final DateFormat isoFormat = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
String formattedDate = isoFormat.format(eDate.getTime());
这是未经测试的,但我认为它应该可以工作。不要使用toString()
进行类似的操作toString()
应仅用于调试消息
使用DateFormat.format(..)
以可预测的形式生成字符串。您只需使用日历返回的日期,而不是将其转换为字符串并返回到日期(显然使用了错误的日期格式)。可通过以下方式获取日期:
eDate.getTime()
在您的情况下,似乎不需要SimpleDataFormat。格式未存储在日期中。它存储在字符串中。Date#toString()
返回一个固定的格式,该格式在其
仅在需要将日期
显示为字符串
时进行格式化
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
表示分钟。另请参见。检查Date.toString()方法
api声明它以
格式:
dow mon dd hh:mm:ss zzz yyyy
即:
Mon Jan 28 14:22:07 EST 2004
您正在告诉解析器期望:2004-01-2814-22-07
eDate.getTime().toString()
以以下格式返回日期的字符串表示形式:
dow mon dd hh:mm:ss zzz yyyy(参见java.util.Date API)
您正在尝试使用以下格式分析日期:
yyyy mm dd hh mm ss
代码正确地抛出了ParseException。这是它无法解析的日期“2010年7月21日7:24:07 PM”@Vishal:是的,这是因为您正在使用java.util.date.toString对其进行格式化。该日期可能无法解析。初始化(而不是构造)eDate可能会有所帮助。请阅读@Carl Smotricz的答案……但对于您的格式“yyy-mm-dd-hh-mm-ss
您阅读的是分钟(mm)而不是月份(mm)…只是一个想法!哦,是的,但我尝试将其更改为MM,但出现了相同的错误。我修复了原始帖子中的格式字符串,以减少读者之间的混淆。运行了它。非常感谢:)使用了BaluC的解决方案日历#getTime()
返回java.util.Date
,不是long
。我假设示例代码是一个测试用例,不是实际的生产代码。如果他的格式正确,它实际上是一个非常好的测试。您可以使用Date-Date=calendar.getTime();
然后通过新的SimpleDataFormat(“yyyy-MM-dd-HH-MM-ss”)对其进行格式化。format(date);
然后是解决下一步的时候了。你有一个日期,你想要一个字符串,在这一点上你想要使用SimpleDataFormat.format()
。我将把它放在我的答案中……我不知道日历的一个对象被自动转换成了一个日期,使用getTime()+1