Java tutorial
/* * 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 } }