I am trying to parse Date/Time String : 2001/05/10 3:45:35 on Japanese
OS.
I know we can have exact Date Time formatting pattern to match this
string and can parse it easily.
It is not a bug, it's a feature!
quoting from
http://java.sun.com/j2se/1.5.0/docs/api/java/text/SimpleDateFormat.html
-------------------------------
Year: For formatting, if the number of pattern letters is 2, the year
is truncated to 2 digits; otherwise it is interpreted as a number.
For parsing, if the number of pattern letters is more than 2, the year
is interpreted literally, regardless of the number of digits. So using
the pattern "MM/dd/yyyy", "01/11/12" parses to Jan 11, 12 A.D.
For parsing with the abbreviated year pattern ("y" or "yy"),
SimpleDateFormat must interpret the abbreviated year relative to some
century. It does this by adjusting dates to be within 80 years before
and 20 years after the time the SimpleDateFormat instance is created.
For example, using a pattern of "MM/dd/yy" and a SimpleDateFormat
instance created on Jan 1, 1997, the string "01/11/12" would be
interpreted as Jan 11, 2012 while the string "05/04/64" would be
interpreted as May 4, 1964.
During parsing, only strings consisting of exactly two digits, as
defined by Character.isDigit(char), will be parsed into the default
century. Any other numeric string, such as a one digit string, a three
or more digit string, or a two digit string that isn't all digits (for
example, "-1"), is interpreted literally. So "01/02/3" or "01/02/003"
are parsed, using the same pattern, as Jan 2, 3 AD. Likewise,
"01/02/-3" is parsed as Jan 2, 4 BC.
---------------------------------
So if you want to be strict, you must do your own format check first
to make sure the fields are the correct length.
You could invent a simple mask checking class that allowed a mask to
be defined something like this:
"9999/99/99 Z9:99:99"
/-: must be literally that value.
9 must be digit 0-9
Z must be space or digit 0-9
space must be space
A - must be upper case letter
a - must be lower case letter
or if you wanted to permit variable width fields, write a regex
checker.