private static Int32 FindPreciseTimeSourceLength()

in csharp/EPAM.Deltix.HdTime/Formatter.cs [413:452]


		private static Int32 FindPreciseTimeSourceLength(String sourceChars, Int32 preciseTimeFormatPosition, Int32 preciseTimeFormatLength, out Int32 preciseTimeSourcePosition)
		{
			Int32 preciseTimeSourceLength;
			// find sourcePosition
			Int32 timeSourceDigits = CalculateDigitLength(
				sourceChars,
				preciseTimeFormatPosition - DateTimeFormatSymbolsCount,
				DateTimeFormatSymbolsCount + preciseTimeFormatLength);

			// if there is no digits
			// date time cuts also previous punctuation symbol before expected digit (for example it time hh.MM.ss.fff should be 12.22.45., but really it is 12.22.45 (without '.'))
			if (timeSourceDigits == 0)
			{
				// getting the previous symbol
				Int32 previousCharPosition = preciseTimeFormatPosition - DateTimeFormatSymbolsCount - 1;
				if (sourceChars.Length > previousCharPosition && previousCharPosition >= 0 && Char.IsPunctuation(sourceChars[previousCharPosition]))
				{	// if previous symbol exists && it is punctuation
					preciseTimeSourcePosition = preciseTimeFormatPosition - DateTimeFormatSymbolsCount;
				}
				else if (sourceChars.Length > previousCharPosition + 1 && previousCharPosition + 1 >= 0 && Char.IsPunctuation(sourceChars[previousCharPosition + 1]))
				{	// if previous symbol does not exist
					preciseTimeSourcePosition = preciseTimeFormatPosition - DateTimeFormatSymbolsCount;
				}
				else
				{	// 
					preciseTimeSourcePosition = preciseTimeFormatPosition - DateTimeFormatSymbolsCount - 1;
				}

				preciseTimeSourceLength = 0;
			}
			else
			{
				Int32 dif = timeSourceDigits - DateTimeFormatSymbolsCount;

				preciseTimeSourceLength = dif < 0 ? 0 : dif;
				preciseTimeSourcePosition = preciseTimeFormatPosition - DateTimeFormatSymbolsCount + timeSourceDigits - preciseTimeSourceLength;
			}

			return preciseTimeSourceLength;
		}