mirror of
https://github.com/dotMorten/NmeaParser.git
synced 2026-01-29 03:44:25 +01:00
Fix RMC FixTime parsing that can lose sub-second precision with doubles (#117)
* Extract local variables for the parameters of DateTimeOffset * Add seconds to FixTime as Ticks in order to preserve sub-second precision that can get lost by using doubles --------- Co-authored-by: Justin King <justin.king@vibrationresearch.com>
This commit is contained in:
parent
c0eb011711
commit
8e19dfebe6
|
|
@ -42,12 +42,15 @@ namespace NmeaParser.Messages
|
|||
|
||||
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]);
|
||||
|
|
|
|||
Loading…
Reference in a new issue