gpt4 book ai didi

java - 从 InputStream 解析日期时出现 ParseException

转载 作者:行者123 更新时间:2023-12-01 22:06:47 25 4
gpt4 key购买 nike

我遇到了与此类似的问题 post在 JUnit 测试期间,日期似乎可以通过 SimpleDateFormat 解析,但我收到一个 ParseException 消息:

java.text.ParseException: Unparseable date: "05-13-2013"

我在 Java 6 下运行。

被测试的类FileMoveBasedOnControlFile有一个函数getDateStringEntriesFromStream,它接受一个I​​nputStream,尝试使用格式MM将该流中的每一行解析为日期-dd-yyyy,将每个成功解析的日期转换为新的格式yyyy-MM-dd,最后将成功转换的日期输出到ArrayList。

'05-11-2013' 似乎解析得很好。测试中的下一个日期“05-13-2013”​​则不会。我不知所措,似乎 InputStream (或“\n”)不应该影响这段代码。我尝试过“\r\n”,但也不起作用。

在测试期间,以下代码将解析第一个日期,但不会解析第二个日期:

@Test
public void testMultipleValidEntries() throws IOException
{
StringBuilder strBuilder = new StringBuilder();

String date1 = "05-11-2013";
String date2 = "05-13-2013";
String date3 = "05-16-2013";

strBuilder.append(date1 + "\n");
strBuilder.append(date2 + "\n");
strBuilder.append(date3);

FileMoveBasedOnControlFile fileMoveBasedOnControlFile = new FileMoveBasedOnControlFile();

InputStream inputStream = new ByteArrayInputStream(strBuilder.toString().getBytes("UTF-8"));

ArrayList<String> entries = fileMoveBasedOnControlFile.getDateStringEntriesFromStream(inputStream);

assertTrue(entries.size() == 3);

assertTrue(entries.get(0).equals("2013-05-11"));
assertTrue(entries.get(1).equals("2013-05-13"));
assertTrue(entries.get(2).equals("2013-05-16"));
}

这是正在测试的类函数:

public ArrayList<String> getDateStringEntriesFromStream(InputStream inputStream) throws IOException
{
ArrayList<String> controlFileEntries = new ArrayList<String>();
BufferedReader controlFileReader = new BufferedReader(new InputStreamReader(inputStream));
String controlFileEntry;

SimpleDateFormat simpleDateFormat = new SimpleDateFormat(ORIGINAL_DATE_FORMAT);
simpleDateFormat.setLenient(false);

LOG.info("Reading stream.");
while( (controlFileEntry = controlFileReader.readLine()) != null)
{
try
{
Date controlFileDate = simpleDateFormat.parse(controlFileEntry);
simpleDateFormat.applyPattern(NEW_DATE_FORMAT);
String newDateString = simpleDateFormat.format(controlFileDate);
controlFileEntries.add(newDateString);
LOG.info("Got " + newDateString + ".");
}
catch(ParseException e)
{
LOG.info("Invalid date entry \'" + controlFileEntry + "\'.");
}
}
if (controlFileEntries.size() == 0)
{
LOG.info("Stream is empty.");
}
return controlFileEntries;
}

其中 ORIGINAL_DATE_FORMAT 为“MM-dd-yyyy”,NEW_DATE_FORMAT 为“yyyy-MM-dd”。

最佳答案

SimpleDateFormat 声明移至循环中。它适用于第一个日期,但随后失败,因为它永远不会重新初始化为您的ORIGINAL_DATE_FORMAT

LOG.info("Reading stream.");
while( (controlFileEntry = controlFileReader.readLine()) != null)
{
// Every iteration should start with the ORIGINAL_DATE_FORMAT
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(ORIGINAL_DATE_FORMAT);
simpleDateFormat.setLenient(false);

关于java - 从 InputStream 解析日期时出现 ParseException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32592102/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com