Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   *  Licensed to the Apache Software Foundation (ASF) under one or more
   *  contributor license agreements.  See the NOTICE file distributed with
   *  this work for additional information regarding copyright ownership.
   *  The ASF licenses this file to You under the Apache License, Version 2.0
   *  (the "License"); you may not use this file except in compliance with
   *  the License.  You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
  *
  *  Unless required by applicable law or agreed to in writing, software
  *  distributed under the License is distributed on an "AS IS" BASIS,
  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
 
 package org.apache.tomcat.util.http;
 
 import java.util.Date;
Utility class to generate HTTP dates.

Author(s):
Remy Maucherat
 
 public final class FastHttpDateFormat {
 
 
     // -------------------------------------------------------------- Variables
 
 
     private static final int CACHE_SIZE = 
         Integer.parseInt(System.getProperty("org.apache.tomcat.util.http.FastHttpDateFormat.CACHE_SIZE""1000"));

    
    
HTTP date format.
 
     private static final SimpleDateFormat format = 
         new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz".);


    
The set of SimpleDateFormat formats to use in getDateHeader().
 
     private static final SimpleDateFormat formats[] = {
         new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz".),
         new SimpleDateFormat("EEEEEE, dd-MMM-yy HH:mm:ss zzz".),
         new SimpleDateFormat("EEE MMMM d HH:mm:ss yyyy".)
     };
 
 
     private final static TimeZone gmtZone = TimeZone.getTimeZone("GMT");


    
GMT timezone - all HTTP dates are on GMT
 
     static {
 
         .setTimeZone();
 
         [0].setTimeZone();
         [1].setTimeZone();
         [2].setTimeZone();
 
     }


    
Instant on which the currentDate object was generated.
 
     private static long currentDateGenerated = 0L;


    
Current formatted date.
 
     private static String currentDate = null;


    
Formatter cache.
 
     private static final ConcurrentHashMap<LongStringformatCache = 
         new ConcurrentHashMap<LongString>();


    
Parser cache.
 
     private static final ConcurrentHashMap<StringLongparseCache = 
        new ConcurrentHashMap<StringLong>();
    // --------------------------------------------------------- Public Methods


    
Get the current date in HTTP format.
    public static final String getCurrentDate() {
        long now = System.currentTimeMillis();
        if ((now - ) > 1000) {
            synchronized () {
                if ((now - ) > 1000) {
                     = .format(new Date(now));
                     = now;
                }
            }
        }
        return ;
    }


    
Get the HTTP format of the specified date.
    public static final String formatDate
        (long valueDateFormat threadLocalformat) {
        Long longValue = new Long(value);
        String cachedDate = .get(longValue);
        if (cachedDate != null)
            return cachedDate;
        String newDate = null;
        Date dateValue = new Date(value);
        if (threadLocalformat != null) {
            newDate = threadLocalformat.format(dateValue);
            updateFormatCache(longValuenewDate);
        } else {
            synchronized () {
                synchronized () {
                    newDate = .format(dateValue);
                }
                updateFormatCache(longValuenewDate);
            }
        }
        return newDate;
    }


    
Try to parse the given date as a HTTP date.
    public static final long parseDate(String value
                                       DateFormat[] threadLocalformats) {
        Long cachedDate = .get(value);
        if (cachedDate != null)
            return cachedDate.longValue();
        Long date = null;
        if (threadLocalformats != null) {
            date = internalParseDate(valuethreadLocalformats);
            updateParseCache(valuedate);
        } else {
            synchronized () {
                date = internalParseDate(value);
                updateParseCache(valuedate);
            }
        }
        if (date == null) {
            return (-1L);
        } else {
            return date.longValue();
        }
    }


    
Parse date with given formatters.
    private static final Long internalParseDate
        (String valueDateFormat[] formats) {
        Date date = null;
        for (int i = 0; (date == null) && (i < formats.length); i++) {
            try {
                date = formats[i].parse(value);
            } catch (ParseException e) {
                ;
            }
        }
        if (date == null) {
            return null;
        }
        return new Long(date.getTime());
    }


    
Update cache.
    private static void updateFormatCache(Long keyString value) {
        if (value == null) {
            return;
        }
        if (.size() > ) {
            .clear();
        }
        .put(keyvalue);
    }


    
Update cache.
    private static void updateParseCache(String keyLong value) {
        if (value == null) {
            return;
        }
        if (.size() > ) {
            .clear();
        }
        .put(keyvalue);
    }
New to GrepCode? Check out our FAQ X