DateUtil.java Source code

Java tutorial

Introduction

Here is the source code for DateUtil.java

Source

/*
 * StatusFeedParser.java
 *
 * Copyright (C) 2005-2008 Tommi Laukkanen
 * http://www.substanceofcode.com
 *
 * 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 com.sugree.utils;

import java.util.TimeZone;
import java.util.Calendar;
import java.util.Date;
import java.util.Vector;

//import com.substanceofcode.utils.StringUtil;

public class DateUtil {
    private static final String[] DAY_OF_WEEK = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
    private static final String[] MONTH = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct",
            "Nov", "Dec" };

    /**
     * Parse RSS date format to Date object.
     * Example of RSS date:
     * Sat, 23 Sep 2006 22:25:11 +0000
     */
    public static Date parseDate(String dateString) {
        Date pubDate = null;
        try {
            // Split date string to values
            // 0 = week day
            // 1 = day of month
            // 2 = month
            // 3 = year (could be with either 4 or 2 digits)
            // 4 = time
            // 5 = GMT
            int weekDayIndex = 0;
            int dayOfMonthIndex = 2;
            int monthIndex = 1;
            int yearIndex = 5;
            int timeIndex = 3;
            int gmtIndex = 4;

            String[] values = dateString.split(" ");
            int columnCount = values.length;
            // Wed Aug 29 20:14:27 +0000 2007

            if (columnCount == 5) {
                // Expected format:
                // 09 Nov 2006 23:18:49 EST
                dayOfMonthIndex = 0;
                monthIndex = 1;
                yearIndex = 2;
                timeIndex = 3;
                gmtIndex = 4;
            } else if (columnCount == 7) {
                // Expected format:
                // Thu, 19 Jul  2007 00:00:00 N
                yearIndex = 4;
                timeIndex = 5;
                gmtIndex = 6;
            } else if (columnCount < 5 || columnCount > 6) {
                throw new Exception("Invalid date format: " + dateString);
            }

            // Day of month
            int dayOfMonth = Integer.parseInt(values[dayOfMonthIndex]);

            // Month
            String[] months = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov",
                    "Dec" };
            String monthString = values[monthIndex];
            int month = 0;
            for (int monthEnumIndex = 0; monthEnumIndex < 12; monthEnumIndex++) {
                if (monthString.equals(months[monthEnumIndex])) {
                    month = monthEnumIndex;
                }
            }

            // Year
            int year = Integer.parseInt(values[yearIndex]);
            if (year < 100) {
                year += 2000;
            }

            // Time
            String[] timeValues = values[timeIndex].split(":");
            int hours = Integer.parseInt(timeValues[0]);
            int minutes = Integer.parseInt(timeValues[1]);
            int seconds = Integer.parseInt(timeValues[2]);

            pubDate = getCal(dayOfMonth, month, year, hours, minutes, seconds, values[gmtIndex]);

        } catch (Exception ex) {
            // TODO: Add exception handling code
            System.err.println("parseRssDate error while converting date string to object: " + dateString + ","
                    + ex.toString());
        } catch (Throwable t) {
            // TODO: Add exception handling code
            System.err.println("parseRssDate error while converting date string to object: " + dateString + ","
                    + t.toString());
        }
        return pubDate;
    }

    /** Get calendar date. **/
    public static Date getCal(int dayOfMonth, int month, int year, int hours, int minutes, int seconds,
            String timezone) throws Exception {
        // Create calendar object from date values
        Calendar cal = Calendar.getInstance();
        cal.setTimeZone(TimeZone.getTimeZone("GMT" + timezone));
        cal.set(Calendar.DAY_OF_MONTH, dayOfMonth);
        cal.set(Calendar.MONTH, month);
        cal.set(Calendar.YEAR, year);
        cal.set(Calendar.HOUR_OF_DAY, hours);
        cal.set(Calendar.MINUTE, minutes);
        cal.set(Calendar.SECOND, seconds);

        return cal.getTime();
    }

    public static String formatHTTPDate(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTimeZone(TimeZone.getTimeZone("GMT+0"));
        cal.setTime(date);
        return DAY_OF_WEEK[cal.get(Calendar.DAY_OF_WEEK) - 1] + ", " + cal.get(Calendar.DAY_OF_MONTH) + " "
                + MONTH[cal.get(Calendar.MONTH)] + " " + cal.get(Calendar.YEAR) + " "
                + cal.get(Calendar.HOUR_OF_DAY) + ":" + cal.get(Calendar.MINUTE) + ":" + cal.get(Calendar.SECOND)
                + " GMT";
        //Tue%2C+27+Mar+2007+22%3A55%3A48+GMT
    }
}