diff --git a/src/NmeaParser/Nmea/Rmc.cs b/src/NmeaParser/Nmea/Rmc.cs index f9a87710..d0bf8626 100644 --- a/src/NmeaParser/Nmea/Rmc.cs +++ b/src/NmeaParser/Nmea/Rmc.cs @@ -42,12 +42,15 @@ public Rmc(string type, string[] message) : base(type, message) if (message[8].Length == 6 && message[0].Length >= 6) { - FixTime = new DateTimeOffset(int.Parse(message[8].Substring(4, 2), CultureInfo.InvariantCulture) + 2000, - int.Parse(message[8].Substring(2, 2), CultureInfo.InvariantCulture), - int.Parse(message[8].Substring(0, 2), CultureInfo.InvariantCulture), - int.Parse(message[0].Substring(0, 2), CultureInfo.InvariantCulture), - int.Parse(message[0].Substring(2, 2), CultureInfo.InvariantCulture), - 0, TimeSpan.Zero).AddSeconds(double.Parse(message[0].Substring(4), CultureInfo.InvariantCulture)); + var year = int.Parse(message[8].Substring(4, 2), CultureInfo.InvariantCulture) + 2000; + var month = int.Parse(message[8].Substring(2, 2), CultureInfo.InvariantCulture); + var day = int.Parse(message[8].Substring(0, 2), CultureInfo.InvariantCulture); + var hour = int.Parse(message[0].Substring(0, 2), CultureInfo.InvariantCulture); + var minute = int.Parse(message[0].Substring(2, 2), CultureInfo.InvariantCulture); + var secondTicks = (long)(decimal.Parse(message[0].Substring(4), CultureInfo.InvariantCulture) * TimeSpan.TicksPerSecond); + + FixTime = new DateTimeOffset(year, month, day, hour, minute, 0, TimeSpan.Zero) + .AddTicks(secondTicks); } Active = (message[1] == "A"); Latitude = NmeaMessage.StringToLatitude(message[2], message[3]);