public static Calendar getCalendarFromCellWithPrecision( Cell cell, int roundingCalendarField )
	{
		Calendar tmp = getCalendarFromCell( cell );
		GregorianCalendar newCalendar = new GregorianCalendar();
		newCalendar.set( Calendar.YEAR, tmp.get( Calendar.YEAR ) );
		newCalendar.set( Calendar.MONTH, tmp.get( Calendar.MONTH ) );
		newCalendar.set( Calendar.DAY_OF_MONTH, tmp.get( Calendar.DAY_OF_MONTH ) );
		newCalendar.set( Calendar.HOUR_OF_DAY, tmp.get( Calendar.HOUR_OF_DAY ) );
		if( roundingCalendarField == Calendar.HOUR )
		{
			if( tmp.get( Calendar.MINUTE ) > 29 )
			{
				newCalendar.set( Calendar.HOUR_OF_DAY, tmp.get( Calendar.HOUR_OF_DAY ) + 1 );
			}
			newCalendar.set( Calendar.MINUTE, 0 );
			newCalendar.set( Calendar.SECOND, 0 );
			newCalendar.set( Calendar.MILLISECOND, 0 );
			return newCalendar;
		}
		newCalendar.set( Calendar.MINUTE, tmp.get( Calendar.MINUTE ) );
		if( roundingCalendarField == Calendar.MINUTE )
		{
			if( tmp.get( Calendar.SECOND ) > 29 )
			{
				newCalendar.set( Calendar.MINUTE, tmp.get( Calendar.MINUTE ) + 1 );
			}
			newCalendar.set( Calendar.SECOND, 0 );
			newCalendar.set( Calendar.MILLISECOND, 0 );
			return newCalendar;
		}
		newCalendar.set( Calendar.SECOND, tmp.get( Calendar.SECOND ) );
		if( roundingCalendarField == Calendar.SECOND )
		{
			if( tmp.get( Calendar.MILLISECOND ) > 499 )
			{
				newCalendar.set( Calendar.SECOND, tmp.get( Calendar.SECOND ) + 1 );
			}
			newCalendar.set( Calendar.MILLISECOND, 0 );
			return newCalendar;
		}
		// round the milliseconds
		newCalendar.set( Calendar.MILLISECOND, tmp.get( Calendar.MILLISECOND ) );
		return newCalendar;

	}