private void ParseMeridianAndSetHour( ClockToken[] dt, ref System.Int32 parsePos, TclDateTime calendar, int hour ) // hour value (1-12 or 0-23) to set. { int pos = parsePos; int hourField; if ( pos < dt.Length && dt[pos].is_Renamed( ClockToken.MERIDIAN ) ) { // SupportClass.CalendarManager.manager.Set(calendar, SupportClass.CalendarManager.AM_PM, dt[pos].Int); parsePos = pos + 1; hourField = SupportClass.CalendarManager.HOUR; } else { hourField = SupportClass.CalendarManager.HOUR_OF_DAY; } if ( hourField == SupportClass.CalendarManager.HOUR && hour == 12 ) { hour = 0; } calendar.hour = hour; }
private bool ParseIso( ClockToken[] dt, ref System.Int32 parsePos, TclDateTime calendar ) // calendar object to set { int pos = parsePos; if ( pos + 6 < dt.Length && dt[pos].IsoBase && dt[pos + 1].is_Renamed( ClockToken.ZONE ) && dt[pos + 2].UNumber && dt[pos + 3].is_Renamed( ':' ) && dt[pos + 4].UNumber && dt[pos + 5].is_Renamed( ':' ) && dt[pos + 6].UNumber ) { calendar.day = dt[pos].Int % 100; calendar.month = ( dt[pos].Int % 10000 ) / 100; calendar.year = dt[pos].Int / 10000; calendar.hour = dt[pos + 2].Int; calendar.minute = dt[pos + 4].Int; calendar.second = dt[pos + 6].Int; parsePos = pos + 7; return true; } if ( pos + 2 < dt.Length && dt[pos].IsoBase && dt[pos + 1].is_Renamed( ClockToken.ZONE ) && dt[pos + 1].Zone.GetUtcOffset( calendar.dateTime ).Hours == ( -7 ) * MILLIS_PER_HOUR && dt[pos + 2].IsoBase ) { calendar.day = dt[pos].Int % 100; calendar.month = ( dt[pos].Int % 10000 ) / 100; calendar.year = dt[pos].Int / 10000; calendar.hour = dt[pos + 2].Int / 10000; calendar.minute = ( dt[pos + 2].Int % 10000 ) / 100; calendar.second = dt[pos + 2].Int % 100; parsePos = pos + 3; return true; } if ( pos + 1 < dt.Length && dt[pos].IsoBase && dt[pos + 1].IsoBase ) { calendar.day = dt[pos].Int % 100; calendar.month = ( dt[pos].Int % 10000 ) / 100; calendar.year = dt[pos].Int / 10000; calendar.hour = dt[pos + 1].Int / 10000; calendar.minute = ( dt[pos + 1].Int % 10000 ) / 100; calendar.second = dt[pos + 1].Int % 100; parsePos = pos + 2; return true; } return false; }
private bool ParseTrek( ClockToken[] dt, ref System.Int32 parsePos, TclDateTime calendar ) // calendar object to set { int pos = parsePos; if ( pos + 3 < dt.Length && dt[pos].is_Renamed( ClockToken.STARDATE ) && dt[pos + 1].UNumber && dt[pos + 2].is_Renamed( '.' ) && dt[pos + 3].UNumber ) { GregorianCalendar gcal = new GregorianCalendar(); int trekYear = dt[pos + 1].Int / 1000 + 2323 - 377; int trekDay = 1 + ( ( dt[pos + 1].Int % 1000 ) * ( gcal.IsLeapYear( trekYear ) ? 366 : 365 ) ) / 1000; int trekSeconds = dt[pos + 3].Int * 144 * 60; calendar.year = trekYear; calendar.dateTime = gcal.AddDays( calendar.dateTime, trekDay ); calendar.second = trekSeconds; parsePos = pos + 4; return true; } return false; }
private bool ParseRelUnits( ClockToken[] dt, ref System.Int32 parsePos, ClockRelTimespan diff ) // time difference to evaluate { int pos = parsePos; if ( pos + 2 < dt.Length && dt[pos].is_Renamed( '+' ) && dt[pos + 1].UNumber && dt[pos + 2].Unit ) { diff.addUnit( dt[pos + 2], dt[pos + 1].Int ); parsePos = pos + 3; return true; } if ( pos + 2 < dt.Length && dt[pos].is_Renamed( '-' ) && dt[pos + 1].UNumber && dt[pos + 2].Unit ) { diff.addUnit( dt[pos + 2], -dt[pos + 1].Int ); parsePos = pos + 3; return true; } if ( pos + 1 < dt.Length && dt[pos].UNumber && dt[pos + 1].Unit ) { diff.addUnit( dt[pos + 1], dt[pos].Int ); parsePos = pos + 2; return true; } else if ( pos + 2 < dt.Length && dt[pos].is_Renamed( ClockToken.NEXT ) && dt[pos + 1].UNumber && dt[pos + 2].Unit ) { diff.addUnit( dt[pos + 2], dt[pos + 1].Int ); parsePos = pos + 3; return true; } if ( pos + 1 < dt.Length && dt[pos].is_Renamed( ClockToken.NEXT ) && dt[pos + 1].Unit ) { diff.addUnit( dt[pos + 1] ); parsePos = pos + 2; return true; } if ( pos < dt.Length && dt[pos].Unit ) { diff.addUnit( dt[pos] ); parsePos = pos + 1; return true; } return false; }
private bool ParseOrdMonth( ClockToken[] dt, ref System.Int32 parsePos, ClockRelTimespan diff ) // time difference to evaluate { int pos = parsePos; if ( pos + 2 < dt.Length && dt[pos].is_Renamed( ClockToken.NEXT ) && dt[pos + 1].UNumber && dt[pos + 2].is_Renamed( ClockToken.MONTH ) ) { diff.addOrdMonth( dt[pos + 2].Int, dt[pos + 1].Int ); parsePos = pos + 3; return true; } if ( pos + 1 < dt.Length && dt[pos].is_Renamed( ClockToken.NEXT ) && dt[pos + 1].is_Renamed( ClockToken.MONTH ) ) { diff.addOrdMonth( dt[pos + 1].Int, 1 ); parsePos = pos + 2; return true; } return false; }
private bool ParseNumber( ClockToken[] dt, ref System.Int32 parsePos, TclDateTime calendar, bool mayBeYear ) // number is considered to be year? { int pos = parsePos; if ( pos < dt.Length && dt[pos].UNumber ) { parsePos = pos + 1; if ( mayBeYear ) { calendar.year = dt[pos].Int; } else { calendar.hour = dt[pos].Int / 100; calendar.minute = dt[pos].Int % 100; calendar.second = 0; } return true; } return false; }
private bool ParseRelSpec( ClockToken[] dt, ref System.Int32 parsePos, ClockRelTimespan diff ) // time difference to evaluate { if ( !ParseRelUnits( dt, ref parsePos, diff ) ) { return false; } int pos = parsePos; if ( pos < dt.Length && dt[pos].is_Renamed( ClockToken.AGO ) ) { diff.negate(); parsePos = pos + 1; } return true; }
private bool ParseDay( ClockToken[] dt, ref System.Int32 parsePos, ClockRelTimespan diff ) // time difference to evaluate { int pos = parsePos; if ( pos + 2 < dt.Length && dt[pos].is_Renamed( '+' ) && dt[pos + 1].UNumber && dt[pos + 2].is_Renamed( ClockToken.DAY ) ) { diff.setWeekday( dt[pos + 2].Int, dt[pos + 1].Int ); parsePos = pos + 3; return true; } if ( pos + 2 < dt.Length && dt[pos].is_Renamed( '-' ) && dt[pos + 1].UNumber && dt[pos + 2].is_Renamed( ClockToken.DAY ) ) { diff.setWeekday( dt[pos + 2].Int, -dt[pos + 1].Int ); parsePos = pos + 3; return true; } if ( pos + 1 < dt.Length && dt[pos].is_Renamed( ClockToken.NEXT ) && dt[pos + 1].is_Renamed( ClockToken.DAY ) ) { diff.setWeekday( dt[pos + 1].Int, 2 ); parsePos = pos + 2; return true; } if ( pos + 1 < dt.Length && dt[pos].is_Renamed( ClockToken.DAY ) && dt[pos + 1].is_Renamed( ',' ) ) { diff.setWeekday( dt[pos].Int ); parsePos = pos + 2; return true; } if ( pos + 1 < dt.Length && dt[pos].UNumber && dt[pos + 1].is_Renamed( ClockToken.DAY ) ) { diff.setWeekday( dt[pos + 1].Int, dt[pos].Int ); parsePos = pos + 2; return true; } if ( pos < dt.Length && dt[pos].is_Renamed( ClockToken.DAY ) ) { diff.setWeekday( dt[pos].Int ); parsePos = pos + 1; return true; } return false; }
private bool ParseDate( ClockToken[] dt, ref System.Int32 parsePos, TclDateTime calendar ) // calendar object to set { int pos = parsePos; if ( pos + 4 < dt.Length && dt[pos].UNumber && dt[pos + 1].is_Renamed( '/' ) && dt[pos + 2].UNumber && dt[pos + 3].is_Renamed( '/' ) && dt[pos + 4].UNumber ) { calendar.day = dt[pos + 2].Int; calendar.month = dt[pos].Int; calendar.year = dt[pos + 4].Int; parsePos = pos + 5; return true; } if ( pos + 4 < dt.Length && dt[pos].UNumber && dt[pos + 1].is_Renamed( '-' ) && dt[pos + 2].is_Renamed( ClockToken.MONTH ) && dt[pos + 3].is_Renamed( '-' ) && dt[pos + 4].UNumber ) { calendar.year = dt[pos + 4].Int; calendar.month = dt[pos + 2].Int; calendar.day = dt[pos].Int; parsePos = pos + 5; return true; } if ( pos + 4 < dt.Length && dt[pos].UNumber && dt[pos + 1].is_Renamed( '-' ) && dt[pos + 2].UNumber && dt[pos + 3].is_Renamed( '-' ) && dt[pos + 4].UNumber ) { calendar.year = dt[pos].Int; calendar.month = dt[pos + 2].Int; calendar.day = dt[pos + 4].Int; parsePos = pos + 5; return true; } if ( pos + 3 < dt.Length && dt[pos].is_Renamed( ClockToken.MONTH ) && dt[pos + 1].UNumber && dt[pos + 2].is_Renamed( ',' ) && dt[pos + 3].UNumber ) { calendar.day = dt[pos + 1].Int; calendar.month = dt[pos].Int; calendar.year = dt[pos + 3].Int; parsePos = pos + 4; return true; } if ( pos + 2 < dt.Length && dt[pos].UNumber && dt[pos + 1].is_Renamed( '/' ) && dt[pos + 2].UNumber ) { calendar.day = dt[pos + 2].Int; calendar.month = dt[pos].Int; parsePos = pos + 3; return true; } if ( pos + 2 < dt.Length && dt[pos].UNumber && dt[pos + 1].is_Renamed( ClockToken.MONTH ) && dt[pos + 2].UNumber ) { calendar.day = dt[pos].Int; calendar.month = dt[pos + 1].Int; calendar.year = dt[pos + 2].Int; parsePos = pos + 3; return true; } if ( pos + 1 < dt.Length && dt[pos].is_Renamed( ClockToken.MONTH ) && dt[pos + 1].UNumber ) { calendar.day = dt[pos + 1].Int; calendar.month = dt[pos].Int; parsePos = pos + 2; return true; } if ( pos + 1 < dt.Length && dt[pos].UNumber && dt[pos + 1].is_Renamed( ClockToken.MONTH ) ) { calendar.day = dt[pos].Int; calendar.month = dt[pos + 1].Int; parsePos = pos + 2; return true; } if ( pos < dt.Length && dt[pos].IsoBase ) { calendar.day = dt[pos].Int % 100; calendar.month = ( dt[pos].Int % 10000 ) / 100; calendar.year = dt[pos].Int / 10000; parsePos = pos + 1; return true; } if ( pos < dt.Length && dt[pos].is_Renamed( ClockToken.EPOCH ) ) { calendar.day = 1; calendar.month = 0; calendar.year = EPOCH_YEAR; parsePos = pos + 1; return true; } return false; }
private bool ParseZone( ClockToken[] dt, ref System.Int32 parsePos, TclDateTime calendar ) // calendar object to set { int pos = parsePos; if ( pos + 1 < dt.Length && dt[pos].is_Renamed( ClockToken.ZONE ) && dt[pos + 1].is_Renamed( ClockToken.DST ) ) { // calendar.setTimeZone(dt[pos].Zone); parsePos = pos + 2; return true; } if ( pos < dt.Length && dt[pos].is_Renamed( ClockToken.ZONE ) ) { // calendar.setTimeZone(dt[pos].Zone); parsePos = pos + 1; return true; } if ( pos < dt.Length && dt[pos].is_Renamed( ClockToken.DAYZONE ) ) { // calendar.setTimeZone(dt[pos].Zone); parsePos = pos + 1; return true; } return false; }
private bool ParseTime( ClockToken[] dt, ref System.Int32 parsePos, TclDateTime calendar ) // calendar object to set { int pos = parsePos; if ( pos + 6 < dt.Length && dt[pos].UNumber && dt[pos + 1].is_Renamed( ':' ) && dt[pos + 2].UNumber && dt[pos + 3].is_Renamed( ':' ) && dt[pos + 4].UNumber && dt[pos + 5].is_Renamed( '-' ) && dt[pos + 6].UNumber ) { ClockToken zone = GetTimeZoneFromRawOffset( ( -dt[pos + 6].Int ) / 100 ); if ( zone != null ) { calendar.hour = dt[pos].Int; calendar.minute = dt[pos + 2].Int; calendar.second = dt[pos + 4].Int; // TODO // calendar.setTimeZone(zone.Zone); parsePos = pos + 7; return true; } } if ( pos + 4 < dt.Length && dt[pos].UNumber && dt[pos + 1].is_Renamed( ':' ) && dt[pos + 2].UNumber && dt[pos + 3].is_Renamed( ':' ) && dt[pos + 4].UNumber ) { parsePos = pos + 5; ParseMeridianAndSetHour( dt, ref parsePos, calendar, dt[pos].Int ); calendar.minute = dt[pos + 2].Int; calendar.second = dt[pos + 4].Int; return true; } if ( pos + 4 < dt.Length && dt[pos].UNumber && dt[pos + 1].is_Renamed( ':' ) && dt[pos + 2].UNumber && dt[pos + 3].is_Renamed( '-' ) && dt[pos + 4].UNumber ) { ClockToken zone = GetTimeZoneFromRawOffset( ( -dt[pos + 4].Int ) / 100 ); if ( zone != null ) { calendar.hour = dt[pos].Int; calendar.minute = dt[pos + 2].Int; // calendar.setTimeZone(zone.Zone); parsePos = pos + 5; return true; } } if ( pos + 2 < dt.Length && dt[pos].UNumber && dt[pos + 1].is_Renamed( ':' ) && dt[pos + 2].UNumber ) { parsePos = pos + 3; ParseMeridianAndSetHour( dt, ref parsePos, calendar, dt[pos].Int ); calendar.minute = dt[pos + 2].Int; return true; } if ( pos + 1 < dt.Length && dt[pos].UNumber && dt[pos + 1].is_Renamed( ClockToken.MERIDIAN ) ) { parsePos = pos + 1; ParseMeridianAndSetHour( dt, ref parsePos, calendar, dt[pos].Int ); return true; } return false; }
internal void addUnit( ClockToken unit ) { addUnit( unit, 1 ); }
internal void addUnit( ClockToken unit, int amount ) { if ( unit.is_Renamed( ClockToken.SEC_UNIT ) ) { addSeconds( unit.Int * amount ); } else if ( unit.is_Renamed( ClockToken.MINUTE_UNIT ) ) { addSeconds( unit.Int * 60 * amount ); } else if ( unit.is_Renamed( ClockToken.MONTH_UNIT ) ) { addMonths( unit.Int * amount ); } }
private ClockToken[] GetTokens( string in_Renamed, bool debug ) // Send the generated token list to stderr? { System.Int32 parsePos = 0; ClockToken dt; ArrayList tokenVector = new ArrayList( in_Renamed.Length ); while ( ( dt = GetNextToken( in_Renamed, ref parsePos ) ) != null ) { tokenVector.Add( dt ); } ClockToken[] tokenArray = new ClockToken[tokenVector.Count]; tokenVector.CopyTo( tokenArray ); #if DEBUG for ( int ix = 0; ix < tokenArray.Length; ix++ ) { if ( ix != 0 ) { System.Console.Error.Write( "," ); } System.Console.Error.Write( tokenArray[ix].ToString() ); } System.Console.Error.WriteLine( "" ); #endif return tokenArray; }