Hi list,
Can someone take a look at the attached patch ? I would like to commit
it to classpath. Its a merge from libgcj and tested there since months.
Okay for classpath ? Does someone see a problem in this ?
Michael
2004-02-12 Michael Koch <[EMAIL PROTECTED]>
* java/net/URLConnection.java
(dateFormat1, dateformat2, dateformat3): New fields.
(dateformats_initialized): New field for lazy initialization of date
format fields.
(getHeaderFieldDate): Rewritten to use DateFormat.parse() instead of
the deprecated Date(String) constructor. This implementation
(initializeDateFormats): New method,
Index: java/net/URLConnection.java
===================================================================
RCS file: /cvsroot/classpath/classpath/java/net/URLConnection.java,v
retrieving revision 1.22
diff -u -b -B -r1.22 URLConnection.java
--- java/net/URLConnection.java 25 Jan 2004 13:39:34 -0000 1.22
+++ java/net/URLConnection.java 12 Feb 2004 16:40:50 -0000
@@ -43,6 +43,8 @@
import java.io.OutputStream;
import java.security.AllPermission;
import java.security.Permission;
+import java.text.ParsePosition;
+import java.text.SimpleDateFormat;
import java.util.Collections;
import java.util.Date;
import java.util.Hashtable;
@@ -161,6 +163,8 @@
*/
protected URL url;
+ private static SimpleDateFormat dateFormat1, dateFormat2, dateFormat3;
+ private static boolean dateformats_initialized = false;
/**
* Creates a URL connection to a given URL. A real connection is not made.
@@ -352,23 +356,24 @@
*/
public long getHeaderFieldDate (String name, long defaultValue)
{
- String str = getHeaderField (name);
-
- if (str == null)
- return defaultValue;
+ if (! dateformats_initialized)
+ initializeDateFormats ();
- // This needs to change since Date(String) is deprecated, but DateFormat
- // doesn't seem to be working for some reason
- //DateFormat df = DateFormat.getDateInstance (DateFormat.FULL, Locale.US);
- //df.setLenient (true);
-
- //Date date = df.parse (value, new ParsePosition (0));
- Date date = new Date (str);
+ long result = defaultValue;
+ String str = getHeaderField (name);
- if (date == null)
- return defaultValue;
+ if (str != null)
+ {
+ Date date;
+ if ((date = dateFormat1.parse (str, new ParsePosition (0))) != null)
+ result = date.getTime ();
+ else if ((date = dateFormat2.parse (str, new ParsePosition (0))) != null)
+ result = date.getTime ();
+ else if ((date = dateFormat3.parse (str, new ParsePosition (0))) != null)
+ result = date.getTime ();
+ }
- return (date.getTime() / 1000);
+ return result;
}
/**
@@ -953,4 +958,22 @@
fileNameMap = map;
}
-}
+
+ // We don't put these in a static initializer, because it creates problems
+ // with initializer co-dependency: SimpleDateFormat's constructors eventually
+ // depend on URLConnection (via the java.text.*Symbols classes).
+ private synchronized void initializeDateFormats()
+ {
+ if (dateformats_initialized)
+ return;
+
+ Locale locale = new Locale("En", "Us", "Unix");
+ dateFormat1 = new SimpleDateFormat("EEE, dd MMM yyyy hh:mm:ss 'GMT'",
+ locale);
+ dateFormat2 = new SimpleDateFormat("EEEE, dd-MMM-yy hh:mm:ss 'GMT'",
+ locale);
+ dateFormat3 = new SimpleDateFormat("EEE MMM d hh:mm:ss yyyy", locale);
+ dateformats_initialized = true;
+ }
+} // class URLConnection
+
_______________________________________________
Classpath mailing list
[EMAIL PROTECTED]
http://mail.gnu.org/mailman/listinfo/classpath