< prev index next >
src/java.base/share/classes/java/text/SimpleDateFormat.java
Print this page
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
@@ -1489,26 +1489,22 @@
// information in compiledPattern.
boolean useFollowingMinusSignAsDelimiter = false;
if (i < compiledPattern.length) {
int nextTag = compiledPattern[i] >>> 8;
- if (!(nextTag == TAG_QUOTE_ASCII_CHAR ||
- nextTag == TAG_QUOTE_CHARS)) {
- obeyCount = true;
- }
+ int nextCount = compiledPattern[i] & 0xff;
+ obeyCount = shouldObeyCount(nextTag, nextCount);
if (hasFollowingMinusSign &&
(nextTag == TAG_QUOTE_ASCII_CHAR ||
nextTag == TAG_QUOTE_CHARS)) {
- int c;
- if (nextTag == TAG_QUOTE_ASCII_CHAR) {
- c = compiledPattern[i] & 0xff;
- } else {
- c = compiledPattern[i+1];
+
+ if (nextTag != TAG_QUOTE_ASCII_CHAR) {
+ nextCount = compiledPattern[i+1];
}
- if (c == minusSign) {
+ if (nextCount == minusSign) {
useFollowingMinusSignAsDelimiter = true;
}
}
}
start = subParse(text, start, tag, count, obeyCount,
@@ -1547,10 +1543,40 @@
}
return parsedDate;
}
+ /* If the next tag/pattern is a <Numeric_Field> then the parser
+ * should consider the count of digits while parsing the contigous digits
+ * for the current tag/pattern
+ */
+ private boolean shouldObeyCount(int tag, int count) {
+ switch (tag) {
+ case PATTERN_MONTH:
+ case PATTERN_MONTH_STANDALONE:
+ return count <= 2;
+ case PATTERN_YEAR:
+ case PATTERN_DAY_OF_MONTH:
+ case PATTERN_HOUR_OF_DAY1:
+ case PATTERN_HOUR_OF_DAY0:
+ case PATTERN_MINUTE:
+ case PATTERN_SECOND:
+ case PATTERN_MILLISECOND:
+ case PATTERN_DAY_OF_YEAR:
+ case PATTERN_DAY_OF_WEEK_IN_MONTH:
+ case PATTERN_WEEK_OF_YEAR:
+ case PATTERN_WEEK_OF_MONTH:
+ case PATTERN_HOUR1:
+ case PATTERN_HOUR0:
+ case PATTERN_WEEK_YEAR:
+ case PATTERN_ISO_DAY_OF_WEEK:
+ return true;
+ default:
+ return false;
+ }
+ }
+
/**
* Private code-size reduction function used by subParse.
* @param text the time text being parsed.
* @param start where to start parsing.
* @param field the date field being parsed.
< prev index next >