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.
* <p>
@@ -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);
}
/**