Return-Path: Delivered-To: apmail-harmony-commits-archive@www.apache.org Received: (qmail 19253 invoked from network); 26 Aug 2008 09:00:18 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 26 Aug 2008 09:00:18 -0000 Received: (qmail 98227 invoked by uid 500); 26 Aug 2008 09:00:16 -0000 Delivered-To: apmail-harmony-commits-archive@harmony.apache.org Received: (qmail 98213 invoked by uid 500); 26 Aug 2008 09:00:16 -0000 Mailing-List: contact commits-help@harmony.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@harmony.apache.org Delivered-To: mailing list commits@harmony.apache.org Received: (qmail 98204 invoked by uid 99); 26 Aug 2008 09:00:16 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 26 Aug 2008 02:00:16 -0700 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 26 Aug 2008 08:59:27 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id F268C23889C4; Tue, 26 Aug 2008 01:59:57 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r689001 - in /harmony/enhanced/classlib/trunk/modules/sql/src/main/java/java/sql: Date.java Time.java Timestamp.java Date: Tue, 26 Aug 2008 08:59:55 -0000 To: commits@harmony.apache.org From: qiuxx@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20080826085957.F268C23889C4@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: qiuxx Date: Tue Aug 26 01:59:50 2008 New Revision: 689001 URL: http://svn.apache.org/viewvc?rev=689001&view=rev Log: Apply for HARMONY-5958,([classlib][sql][performance] - improve performance of java.sql.Date/Time/Timestamp.toString()) Modified: harmony/enhanced/classlib/trunk/modules/sql/src/main/java/java/sql/Date.java harmony/enhanced/classlib/trunk/modules/sql/src/main/java/java/sql/Time.java harmony/enhanced/classlib/trunk/modules/sql/src/main/java/java/sql/Timestamp.java Modified: harmony/enhanced/classlib/trunk/modules/sql/src/main/java/java/sql/Date.java URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/sql/src/main/java/java/sql/Date.java?rev=689001&r1=689000&r2=689001&view=diff ============================================================================== --- harmony/enhanced/classlib/trunk/modules/sql/src/main/java/java/sql/Date.java (original) +++ harmony/enhanced/classlib/trunk/modules/sql/src/main/java/java/sql/Date.java Tue Aug 26 01:59:50 2008 @@ -17,8 +17,6 @@ package java.sql; -import java.text.SimpleDateFormat; - /** * A Date class which can consume and produce dates in SQL Date format. *

@@ -175,8 +173,28 @@ */ @Override public String toString() { - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); //$NON-NLS-1$ - return dateFormat.format(this); + StringBuilder sb = new StringBuilder(10); + + format((getYear() + 1900), 4, sb); + sb.append('-'); + format((getMonth() + 1), 2, sb); + sb.append('-'); + format(getDate(), 2, sb); + + return sb.toString(); + } + + private static final String PADDING = "0000"; //$NON-NLS-1$ + + /* + * Private method to format the time + */ + private void format(int date, int digits, StringBuilder sb) { + String str = String.valueOf(date); + if (digits - str.length() > 0) { + sb.append(PADDING.substring(0, digits - str.length())); + } + sb.append(str); } /** Modified: harmony/enhanced/classlib/trunk/modules/sql/src/main/java/java/sql/Time.java URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/sql/src/main/java/java/sql/Time.java?rev=689001&r1=689000&r2=689001&view=diff ============================================================================== --- harmony/enhanced/classlib/trunk/modules/sql/src/main/java/java/sql/Time.java (original) +++ harmony/enhanced/classlib/trunk/modules/sql/src/main/java/java/sql/Time.java Tue Aug 26 01:59:50 2008 @@ -17,7 +17,6 @@ package java.sql; -import java.text.SimpleDateFormat; import java.util.Date; /** @@ -180,8 +179,28 @@ */ @Override public String toString() { - SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss"); //$NON-NLS-1$ - return dateFormat.format(this); + StringBuilder sb = new StringBuilder(8); + + format(getHours(), 2, sb); + sb.append(':'); + format(getMinutes(), 2, sb); + sb.append(':'); + format(getSeconds(), 2, sb); + + return sb.toString(); + } + + private static final String PADDING = "00"; //$NON-NLS-1$ + + /* + * Private method to format the time + */ + private void format(int date, int digits, StringBuilder sb) { + String str = String.valueOf(date); + if (digits - str.length() > 0) { + sb.append(PADDING.substring(0, digits - str.length())); + } + sb.append(str); } /** Modified: harmony/enhanced/classlib/trunk/modules/sql/src/main/java/java/sql/Timestamp.java URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/sql/src/main/java/java/sql/Timestamp.java?rev=689001&r1=689000&r2=689001&view=diff ============================================================================== --- harmony/enhanced/classlib/trunk/modules/sql/src/main/java/java/sql/Timestamp.java (original) +++ harmony/enhanced/classlib/trunk/modules/sql/src/main/java/java/sql/Timestamp.java Tue Aug 26 01:59:50 2008 @@ -309,62 +309,43 @@ @SuppressWarnings("deprecation") @Override public String toString() { - /* - * Use a DecimalFormat to lay out the nanosecond value as a simple - * string of 9 integers, with leading Zeros - */ - DecimalFormat decimalFormat = new DecimalFormat("0"); //$NON-NLS-1$ - decimalFormat.setMinimumIntegerDigits(9); - decimalFormat.setMaximumIntegerDigits(9); - String theNanos = decimalFormat.format(nanos); - theNanos = stripTrailingZeros(theNanos); - - String year = format((getYear() + 1900), 4); - String month = format((getMonth() + 1), 2); - String date = format(getDate(), 2); - String hours = format(getHours(), 2); - String minutes = format(getMinutes(), 2); - String seconds = format(getSeconds(), 2); - - return year + '-' + month + '-' + date + ' ' + hours + ':' + minutes - + ':' + seconds + '.' + theNanos; - } + StringBuilder sb = new StringBuilder(29); - /* - * Private method to format the time - */ - private String format(int date, int digits) { - StringBuilder dateStringBuffer = new StringBuilder(String.valueOf(date)); - while (dateStringBuffer.length() < digits) { - dateStringBuffer = dateStringBuffer.insert(0, '0'); + format((getYear() + 1900), 4, sb); + sb.append('-'); + format((getMonth() + 1), 2, sb); + sb.append('-'); + format(getDate(), 2, sb); + sb.append(' '); + format(getHours(), 2, sb); + sb.append(':'); + format(getMinutes(), 2, sb); + sb.append(':'); + format(getSeconds(), 2, sb); + sb.append('.'); + if (nanos == 0) { + sb.append('0'); + } else { + format(nanos, 9, sb); + while (sb.charAt(sb.length() - 1) == '0') { + sb.setLength(sb.length() - 1); + } } - return dateStringBuffer.toString(); + + return sb.toString(); } - /* - * Private method to strip trailing '0' characters from a string. @param - * inputString the starting string @return a string with the trailing zeros - * stripped - will leave a single 0 at the beginning of the string - */ - private String stripTrailingZeros(String inputString) { - String finalString; + private static final String PADDING = "000000000"; //$NON-NLS-1$ - int i; - for (i = inputString.length(); i > 0; i--) { - if (inputString.charAt(i - 1) != '0') { - break; - } - /* - * If the string has a 0 as its first character, return a string - * with a single '0' - */ - if (i == 1) { - return "0"; //$NON-NLS-1$ - } + /* + * Private method to format the time + */ + private void format(int date, int digits, StringBuilder sb) { + String str = String.valueOf(date); + if (digits - str.length() > 0) { + sb.append(PADDING.substring(0, digits - str.length())); } - - finalString = inputString.substring(0, i); - return finalString; + sb.append(str); } /**