|
What this is
Other links
The source codepackage com.ice.syslogd; import java.lang.*; import java.text.*; import java.util.*; /** * The TimestampFormat class implements the code necessary * to format and parse syslog timestamps, which come in the * flavor of 'Sep 14 15:43:06'. * * @version $Revision: 1.1.1.1 $ * @author Timothy Gerard Endres, * <a href="mailto:time@ice.com">time@ice.com. * @see SyslogServer */ public class TimestampFormat extends Format { public static final String RCS_ID = "$Id: TimestampFormat.java,v 1.1.1.1 1998/02/22 05:47:54 time Exp $"; public static final String RCS_REV = "$Revision: 1.1.1.1 $"; public static final String RCS_NAME = "$Name: $"; static public final String DEFAULT_GMT_TZID = "GMT+00"; static public final TimestampFormat getInstance() { return new TimestampFormat(); } public TimestampFormat() { super(); } public String format( Date date ) throws IllegalArgumentException { TimeZone tz = TimeZone.getTimeZone ( TimestampFormat.DEFAULT_GMT_TZID ); return formatTimeZone( date, tz ); } public String formatTimeZone( Date date, TimeZone tz ) throws IllegalArgumentException { SimpleDateFormat dateFormat; Locale loc = Locale.US; // UNDONE dateFormat = new SimpleDateFormat( "MMM", loc ); dateFormat.setTimeZone( tz ); String month = dateFormat.format( date ); month = month.substring( 0, 3 ); dateFormat = new SimpleDateFormat( "dd HH:mm:ss", loc ); dateFormat.setTimeZone( tz ); String rest = dateFormat.format( date ); String result = new String ( month + " " + rest ); return result; } public StringBuffer format( Object date, StringBuffer appendTo, FieldPosition fieldPos ) throws IllegalArgumentException { // UNDONE - handle fieldPos! String tmpFormat = this.format( (Date)date ); appendTo.append( tmpFormat ); return appendTo; } public Date parse( String source ) throws ParseException { return parseTimestamp( source ); } public Object parseObject( String source, ParsePosition pos ) { Date stamp = null; try { stamp = this.parseTimestamp( source ); } catch ( ParseException ex ) { stamp = null; } return (Object) stamp; } // UNDONE - all the positions in ParseExceptions are zero. public Date parseTimestamp( String source ) throws ParseException { String monName = null; String dateStr = null; String hmsStr = null; String hourStr = null; String minStr = null; String secStr = null; StringTokenizer toker = new StringTokenizer( source, " " ); int tokeCount = toker.countTokens(); if ( tokeCount != 3 ) { throw new ParseException ( "a valid timestamp has 3 fields, not " + tokeCount, 0 ); } try { monName = toker.nextToken(); } catch ( NoSuchElementException ex ) { throw new ParseException ( "could not parse month name (field 1)", 0 ); } try { dateStr = toker.nextToken(); } catch ( NoSuchElementException ex ) { throw new ParseException ( "could not parse day of month (field 2)", 0 ); } try { hmsStr = toker.nextToken(); } catch ( NoSuchElementException ex ) { throw new ParseException ( "could not parse time hh:mm:ss (field 3)", 0 ); } toker = new StringTokenizer( hmsStr, ":" ); tokeCount = toker.countTokens(); if ( tokeCount != 3 ) { throw new ParseException ( "'" +hmsStr+ "' is not a valid timestamp time string", 0 ); } try { hourStr = toker.nextToken(); } catch ( NoSuchElementException ex ) { throw new ParseException ( "could not parse time hour (field 3.1)", 0 ); } try { minStr = toker.nextToken(); } catch ( NoSuchElementException ex ) { throw new ParseException ( "could not parse time minute (field 3.2)", 0 ); } try { secStr = toker.nextToken(); } catch ( NoSuchElementException ex ) { throw new ParseException ( "could not parse time second (field 3.3)", 0 ); } int month = 0; int date = 0; int hour = 0; int minute = 0; int second = 0; try { month = this.monthNameToInt( monName ); } catch ( ParseException ex ) { throw new ParseException ( "could not convert month name (field 1)", 0 ); } try { date = Integer.parseInt( dateStr ); } catch ( NumberFormatException ex ) { throw new ParseException ( "could not convert month day (field 2)", 0 ); } if ( date < 1 || date > 31 ) { throw new ParseException ( "month day '" + date + "' is out of range", 0 ); } try { hour = Integer.parseInt( hourStr ); } catch ( NumberFormatException ex ) { throw new ParseException ( ( "could not convert hour (field 3.1) '" + hourStr + "' - " + ex.getMessage() ), 0 ); } if ( hour < 0 || hour > 24 ) { throw new ParseException ( "hour '" + hour + "' is out of range", 0 ); } try { minute = Integer.parseInt( minStr ); } catch ( NumberFormatException ex ) { throw new ParseException ( ( "could not convert minute (field 3.2) '" + minStr + "' - " + ex.getMessage() ), 0 ); } if ( minute < 0 || minute > 59 ) { throw new ParseException ( "minute '" + minute + "' is out of range", 0 ); } try { second = Integer.parseInt( secStr ); } catch ( NumberFormatException ex ) { throw new ParseException ( ( "could not convert second (field 3.3) '" + secStr + "' - " + ex.getMessage() ), 0 ); } if ( second < 0 || second > 59 ) { throw new ParseException ( "second '" + second + "' is out of range", 0 ); } Locale loc = Locale.US; // UNDONE TimeZone tz = TimeZone.getTimeZone ( TimestampFormat.DEFAULT_GMT_TZID ); Calendar cal = Calendar.getInstance( tz, loc ); cal.setTime( new Date() ); cal.set( cal.get(Calendar.YEAR), month, date, hour, minute, second ); Date result = new Date( cal.getTime().getTime() ); return result; } private int monthNameToInt( String name ) throws ParseException { // UNDONE - this could be optimized by checking the // first character, since this resolves all // by the 'A', 'J' and 'M' months. // if ( name.equalsIgnoreCase( "Jan" ) ) return 0; else if ( name.equalsIgnoreCase( "Feb" ) ) return 1; else if ( name.equalsIgnoreCase( "Mar" ) ) return 2; else if ( name.equalsIgnoreCase( "Apr" ) ) return 3; else if ( name.equalsIgnoreCase( "May" ) ) return 4; else if ( name.equalsIgnoreCase( "Jun" ) ) return 5; else if ( name.equalsIgnoreCase( "Jul" ) ) return 6; else if ( name.equalsIgnoreCase( "Aug" ) ) return 7; else if ( name.equalsIgnoreCase( "Sep" ) ) return 8; else if ( name.equalsIgnoreCase( "Oct" ) ) return 9; else if ( name.equalsIgnoreCase( "Nov" ) ) return 10; else if ( name.equalsIgnoreCase( "Dec" ) ) return 11; throw new ParseException ( "unknown month name '" + name + "'", 0 ); } } |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.