Fix bug #54557 - Don't mis-detect format patterns like .000 as dates
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1445725 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
8d7d3f54c0
commit
9f23a59eaa
@ -55,7 +55,8 @@ public class DateUtil {
|
|||||||
*/
|
*/
|
||||||
private static final Pattern date_ptrn1 = Pattern.compile("^\\[\\$\\-.*?\\]");
|
private static final Pattern date_ptrn1 = Pattern.compile("^\\[\\$\\-.*?\\]");
|
||||||
private static final Pattern date_ptrn2 = Pattern.compile("^\\[[a-zA-Z]+\\]");
|
private static final Pattern date_ptrn2 = Pattern.compile("^\\[[a-zA-Z]+\\]");
|
||||||
private static final Pattern date_ptrn3 = Pattern.compile("^[\\[\\]yYmMdDhHsS\\-/,. :\"\\\\]+0*[ampAMP/]*$");
|
private static final Pattern date_ptrn3a = Pattern.compile("[yYmMdDhHsS]");
|
||||||
|
private static final Pattern date_ptrn3b = Pattern.compile("^[\\[\\]yYmMdDhHsS\\-/,. :\"\\\\]+0*[ampAMP/]*$");
|
||||||
// elapsed time patterns: [h],[m] and [s]
|
// elapsed time patterns: [h],[m] and [s]
|
||||||
private static final Pattern date_ptrn4 = Pattern.compile("^\\[([hH]+|[mM]+|[sS]+)\\]");
|
private static final Pattern date_ptrn4 = Pattern.compile("^\\[([hH]+|[mM]+|[sS]+)\\]");
|
||||||
|
|
||||||
@ -364,10 +365,16 @@ public class DateUtil {
|
|||||||
fs = fs.substring(0, fs.indexOf(';'));
|
fs = fs.substring(0, fs.indexOf(';'));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Otherwise, check it's only made up, in any case, of:
|
// Ensure it has some date letters in it
|
||||||
// y m d h s - \ / , . :
|
// (Avoids false positives on the rest of pattern 3)
|
||||||
|
if (! date_ptrn3a.matcher(fs).find()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we get here, check it's only made up, in any case, of:
|
||||||
|
// y m d h s - \ / , . : [ ]
|
||||||
// optionally followed by AM/PM
|
// optionally followed by AM/PM
|
||||||
return date_ptrn3.matcher(fs).matches();
|
return date_ptrn3b.matcher(fs).matches();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -499,5 +499,14 @@ public final class TestHSSFDateUtil extends TestCase {
|
|||||||
assertEquals(valueToTest.getTime(), returnedValue.getTime());
|
assertEquals(valueToTest.getTime(), returnedValue.getTime());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DateUtil.isCellFormatted(Cell) should not true for a numeric cell
|
||||||
|
* that's formatted as ".0000"
|
||||||
|
*/
|
||||||
|
public void testBug54557() throws Exception {
|
||||||
|
final String format = ".0000";
|
||||||
|
boolean isDateFormat = HSSFDateUtil.isADateFormat(165, format);
|
||||||
|
|
||||||
|
assertEquals(false, isDateFormat);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user