All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.firefly.codec.http2.model.DateGenerator Maven / Gradle / Ivy

There is a newer version: 4.0.3.2
Show newest version
package com.firefly.codec.http2.model;

import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.TimeZone;

import com.firefly.utils.StringUtils;

/**
 * ThreadLocal Date formatters for HTTP style dates.
 */
public class DateGenerator {
	private static final TimeZone __GMT = TimeZone.getTimeZone("GMT");

	static {
		__GMT.setID("GMT");
	}

	static final String[] DAYS = { "Sat", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
	static final String[] MONTHS = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
			"Jan" };

	private static final ThreadLocal __dateGenerator = new ThreadLocal() {
		@Override
		protected DateGenerator initialValue() {
			return new DateGenerator();
		}
	};

	public final static String __01Jan1970 = DateGenerator.formatDate(0);

	/**
	 * Format HTTP date "EEE, dd MMM yyyy HH:mm:ss 'GMT'"
	 * 
	 * @param date
	 *            the date in milliseconds
	 * @return the formatted date
	 */
	public static String formatDate(long date) {
		return __dateGenerator.get().doFormatDate(date);
	}

	/**
	 * Format "EEE, dd-MMM-yyyy HH:mm:ss 'GMT'" for cookies
	 * 
	 * @param buf
	 *            the buffer to put the formatted date into
	 * @param date
	 *            the date in milliseconds
	 */
	public static void formatCookieDate(StringBuilder buf, long date) {
		__dateGenerator.get().doFormatCookieDate(buf, date);
	}

	/**
	 * Format "EEE, dd-MMM-yyyy HH:mm:ss 'GMT'" for cookies
	 * 
	 * @param date
	 *            the date in milliseconds
	 * @return the formatted date
	 */
	public static String formatCookieDate(long date) {
		StringBuilder buf = new StringBuilder(28);
		formatCookieDate(buf, date);
		return buf.toString();
	}

	private final StringBuilder buf = new StringBuilder(32);
	private final GregorianCalendar gc = new GregorianCalendar(__GMT);

	/**
	 * Format HTTP date "EEE, dd MMM yyyy HH:mm:ss 'GMT'"
	 * 
	 * @param date
	 *            the date in milliseconds
	 * @return the formatted date
	 */
	public String doFormatDate(long date) {
		buf.setLength(0);
		gc.setTimeInMillis(date);

		int day_of_week = gc.get(Calendar.DAY_OF_WEEK);
		int day_of_month = gc.get(Calendar.DAY_OF_MONTH);
		int month = gc.get(Calendar.MONTH);
		int year = gc.get(Calendar.YEAR);
		int century = year / 100;
		year = year % 100;

		int hours = gc.get(Calendar.HOUR_OF_DAY);
		int minutes = gc.get(Calendar.MINUTE);
		int seconds = gc.get(Calendar.SECOND);

		buf.append(DAYS[day_of_week]);
		buf.append(',');
		buf.append(' ');
		StringUtils.append2digits(buf, day_of_month);

		buf.append(' ');
		buf.append(MONTHS[month]);
		buf.append(' ');
		StringUtils.append2digits(buf, century);
		StringUtils.append2digits(buf, year);

		buf.append(' ');
		StringUtils.append2digits(buf, hours);
		buf.append(':');
		StringUtils.append2digits(buf, minutes);
		buf.append(':');
		StringUtils.append2digits(buf, seconds);
		buf.append(" GMT");
		return buf.toString();
	}

	/**
	 * Format "EEE, dd-MMM-yy HH:mm:ss 'GMT'" for cookies
	 * 
	 * @param buf
	 *            the buffer to format the date into
	 * @param date
	 *            the date in milliseconds
	 */
	public void doFormatCookieDate(StringBuilder buf, long date) {
		gc.setTimeInMillis(date);

		int day_of_week = gc.get(Calendar.DAY_OF_WEEK);
		int day_of_month = gc.get(Calendar.DAY_OF_MONTH);
		int month = gc.get(Calendar.MONTH);
		int year = gc.get(Calendar.YEAR);
		year = year % 10000;

		int epoch = (int) ((date / 1000) % (60 * 60 * 24));
		int seconds = epoch % 60;
		epoch = epoch / 60;
		int minutes = epoch % 60;
		int hours = epoch / 60;

		buf.append(DAYS[day_of_week]);
		buf.append(',');
		buf.append(' ');
		StringUtils.append2digits(buf, day_of_month);

		buf.append('-');
		buf.append(MONTHS[month]);
		buf.append('-');
		StringUtils.append2digits(buf, year / 100);
		StringUtils.append2digits(buf, year % 100);

		buf.append(' ');
		StringUtils.append2digits(buf, hours);
		buf.append(':');
		StringUtils.append2digits(buf, minutes);
		buf.append(':');
		StringUtils.append2digits(buf, seconds);
		buf.append(" GMT");
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy