in csharp/EPAM.Deltix.HdTime/Formatters.cs [591:615]
static DefaultTimeFormatter()
{
const int N = SByte.MaxValue + 1;
fieldLengths = new int[N];
fields = new IFormattable[N][];
IFormattable f;
// Hour in day [0..23] (Java & .NET)
RegisterField('H', 2, f = new Hours24Field2(), f, new Hours24Field2w02());
// Minute in hour (Java & .NET)
RegisterField('m', 2, f = new MinutesField2(), f, new MinutesField2w02());
// Second in minute (Java & .NET)
RegisterField('s', 2, f = new SecondsField2(), f, new SecondsField2w02());
// Millisecond (Java)
//registerField('S', 3, f = new MillisecondsField3(), f, new MillisecondsField3w02(), new FractionsField3());
// Fractions (.NET, also replaces Java8Time 'S' char)
RegisterField('f', Int32.MaxValue,
new Fail("Fractions field can't be longer than 9 digits"),
new FractionsField1(), new FractionsField2(), new FractionsField3(),
new FractionsField4(), new FractionsField5(), new FractionsField6(),
new FractionsField7(), new FractionsField8(), new FractionsField9());
RegisterSynonymousField('f', 'S');
RegisterSynonymousField('f', 'F');
}