Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
   *
   * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
   *
   * The contents of this file are subject to the terms of either the GNU
   * General Public License Version 2 only ("GPL") or the Common Development
   * and Distribution License("CDDL") (collectively, the "License").  You
   * may not use this file except in compliance with the License. You can obtain
  * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
  * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
  * language governing permissions and limitations under the License.
  *
  * When distributing the software, include this License Header Notice in each
  * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
  * Sun designates this particular file as subject to the "Classpath" exception
  * as provided by Sun in the GPL Version 2 section of the License file that
  * accompanied this code.  If applicable, add the following below the License
  * Header, with the fields enclosed by brackets [] replaced by your own
  * identifying information: "Portions Copyrighted [year]
  * [name of copyright owner]"
  *
  * Contributor(s):
  *
  * If you wish your version of this file to be governed by only the CDDL or
  * only the GPL Version 2, indicate your decision by adding "[Contributor]
  * elects to include this software in this distribution under the [CDDL or GPL
  * Version 2] license."  If you don't indicate a single choice of license, a
  * recipient has the option to distribute your version of this file under
  * either the CDDL, the GPL Version 2 or to extend the choice of license to
  * its licensees as provided above.  However, if you add GPL Version 2 code
  * and therefore, elected the GPL Version 2 license, then the option applies
  * only if the new code is made subject to such option by the copyright
  * holder.
  *
  *
  * This file incorporates work covered by the following copyright and
  * permission notice:
  *
  * Copyright 2004 The Apache Software Foundation
  *
  * Licensed 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;
 import java.util.Map;
Utility class to generate HTTP dates.

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

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


    
The set of SimpleDateFormat formats to use in getDateHeader().
 
     protected 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".)
     };
 
    protected 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.
    protected static long currentDateGenerated = 0L;


    
Current formatted date.
    protected static String currentDate = null;


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


    
Parser cache.
    protected 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) {
                     = now;
                     = .format(new Date(now));
                }
            }
        }
        return ;
    }


    
Get the HTTP format of the specified date.
    public static final String formatDate
        (long valueDateFormat threadLocalformat) {
        Long longValue = Long.valueOf(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 Long.valueOf(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