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;
}