public static DateTime ParseTimestamp()

in FixAntenna/NetCore/Message/HighPrecisionDateTimeParsers.cs [197:257]


		public static DateTime ParseTimestamp(byte[] buffer, int offset, int count)
		{
			if (buffer == null || buffer[offset + 8] != (byte)'-' || buffer[offset + 11] != (byte)':' ||
				buffer[offset + 14] != (byte)':')
			{
				throw new ArgumentException("Invalid timestamp value: " +
											StringHelper.NewString(buffer, offset, count));
			}

			var year = FixTypes.ParseYearPart(buffer, offset);
			var month = FixTypes.ParseNumberPart(buffer, offset + 4, offset + 6);
			if (month < 1 || month > 12)
			{
				throw new ArgumentException("Incorrect month value");
			}

			var date = FixTypes.ParseDatePart(buffer, offset, year, month);
			if (buffer[offset + 8] != (byte)'-')
			{
				throw new ArgumentException("Incorrect date time delimiter");
			}

			var hour = FixTypes.ParseNumberPart(buffer, offset + 9, offset + 11);
			if (hour < 0 || hour > 23)
			{
				throw new ArgumentException("Incorrect hour value");
			}

			var minute = FixTypes.ParseNumberPart(buffer, offset + 12, offset + 14);
			if (minute < 0 || minute > 59)
			{
				throw new ArgumentException("Incorrect minute value");
			}

			var second = FixTypes.ParseNumberPart(buffer, offset + 15, offset + 17);
			if (second < 0 || second > 60)
			{
				throw new ArgumentException("Incorrect second value");
			}

			var nanosecond = 0;
			if (count >= 19)
			{
				if (buffer[offset + 17] != (byte)'.')
				{
					throw new ArgumentException();
				}

				nanosecond = ParseNano(buffer, offset, 18, count);
			}

			if (second == 60)
			{
				var dateTime = new DateTimeBuilder(year, month, date, hour, minute, 59).SetNanosecond(nanosecond)
					.Build(DateTimeKind.Utc);
				return dateTime.AddSeconds(1);
			}

			return new DateTimeBuilder(year, month, date, hour, minute, second).SetNanosecond(nanosecond)
				.Build(DateTimeKind.Utc);
		}