diff options
author | Tom Tromey <tromey@redhat.com> | 2003-11-11 01:09:46 +0000 |
---|---|---|
committer | Tom Tromey <tromey@redhat.com> | 2003-11-11 01:09:46 +0000 |
commit | e8daba3deffda516ddb1021c63333d3be152127d (patch) | |
tree | ad8e441492211b180cbea6e679fafbac0604b3fd /java/sql | |
parent | 47c2424bb9ee077d06583e30bb9516a1a13098ff (diff) | |
download | classpath-e8daba3deffda516ddb1021c63333d3be152127d.tar.gz |
2003-11-10 Gary Benson <gbenson@redhat.com>
* java/sql/Timestamp.java (valueOf): Correctly handle
nanoseconds.
Diffstat (limited to 'java/sql')
-rw-r--r-- | java/sql/Timestamp.java | 35 |
1 files changed, 26 insertions, 9 deletions
diff --git a/java/sql/Timestamp.java b/java/sql/Timestamp.java index be0aa4dcd..5ec75da61 100644 --- a/java/sql/Timestamp.java +++ b/java/sql/Timestamp.java @@ -58,11 +58,7 @@ public class Timestamp extends java.util.Date /** * Used for parsing and formatting this date. */ - // Millisecond will have to be close enough for now. - private static SimpleDateFormat parse_sdf = - new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSS"); - - private static SimpleDateFormat format_sdf = + private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); /** @@ -79,14 +75,35 @@ public class Timestamp extends java.util.Date */ public static Timestamp valueOf(String str) { + int nanos = 0; + int dot = str.indexOf('.'); + if (dot != -1) + { + if (str.lastIndexOf('.') != dot) + throw new IllegalArgumentException(str); + + int len = str.length() - dot - 1; + if (len < 1 || len > 9) + throw new IllegalArgumentException(str); + + nanos = Integer.parseInt(str.substring(dot + 1)); + for (int i = len; i < 9; i++) + nanos *= 10; + + str = str.substring(0, dot); + + } + try { - java.util.Date d = (java.util.Date)parse_sdf.parseObject(str); + java.util.Date d = (java.util.Date)sdf.parseObject(str); if (d == null) throw new IllegalArgumentException(str); - else - return new Timestamp(d.getTime()); + + Timestamp ts = new Timestamp(d.getTime() + nanos / 1000000); + ts.nanos = nanos; + return ts; } catch (ParseException e) { @@ -133,7 +150,7 @@ public class Timestamp extends java.util.Date */ public String toString() { - return format_sdf.format(this) + "." + getNanos(); + return sdf.format(this) + "." + getNanos(); } /** |