Question regarding date formatting in the Network Server:

        System.out.println(java.sql.Date.valueOf("0001-01-01"));

With a Sun JVM, the above line will print "0001-01-01". With an IBM JVM, it will print "1-01-01". The difference is apparently in the implementation of the "toString()" method for the two JVMs.

Currently, when a query against Network Server returns a date column, the string value for that column is returned using the following line (in DRDAConnThread.java):

        writer.writeString(((java.sql.Date) val).toString());

This works fine for Sun JVM, because the toString() method returns "0001-01-01". However, for IBM JVM, the string "1-01-01" is returned, and that causes the JDBC client to fail, presumably because the client sees it as an invalid date string.

This is reproduced easily enough; start the server with an IBM JVM, connect to it using ij, insert the value "0001-01-01" into a table, then select from the table. You'll get an error.

So my question is three-fold:

1) The Java definition for java.sql.Date.toString() says: "Formats a date in the date escape format yyyy-mm-dd". So as far as I can tell, this means that, with the current implementation, the format yyyy-mm-dd will always be used, regardless of locale. Is that right? And is that _acceptable_??

2) If the answer to #1 is "Yes", then is it safe to replace the "writeString" 
call above with the following?

        SimpleDateFormat df = new java.text.SimpleDateFormat("yyyy-MM-dd");
        writer.writeString(df.format((java.sql.Date) val));

Or is there some reason why we need to avoid using SimpleDateFormat?

3) I noticed some DateFormat code in the engn, for Derby embedded. Should Network Server just be using that somehow, instead of doing a different thing here?

Feedback/input?

Thanks,
Army

Reply via email to