Cleanup of fix and add unit test to verify

This commit is contained in:
Morten Nielsen 2024-11-19 20:11:13 -08:00
parent 8e19dfebe6
commit 333e9000b3
3 changed files with 21 additions and 10 deletions

View file

@ -42,15 +42,13 @@ namespace NmeaParser.Messages
if (message[8].Length == 6 && message[0].Length >= 6)
{
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);
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).
AddTicks((long)(double.Parse(message[0].Substring(4), CultureInfo.InvariantCulture) * TimeSpan.TicksPerSecond));
}
Active = (message[1] == "A");
Latitude = NmeaMessage.StringToLatitude(message[2], message[3]);

View file

@ -1,7 +1,7 @@
<Project Sdk="MSBuild.Sdk.Extras/3.0.22">
<PropertyGroup>
<TargetFrameworks>net472;net6.0</TargetFrameworks>
<TargetFrameworks>net472;net6.0;net7.0;net8.0</TargetFrameworks>
<IsPackable>false</IsPackable>
<LangVersion>8.0</LangVersion>
</PropertyGroup>

View file

@ -209,6 +209,19 @@ namespace NmeaParser.Tests
Assert.AreEqual(0.019, rmc.Speed);
}
[TestMethod]
[WorkItem(116)]
public void TestGprmc_DateCheck()
{
// Tests a behavior change in TimeSpan.AddSeconds introduced in .NET 7
string input = "$GPRMC,141825.2,A,4249.92297,N,08548.52186,W,000.01,227.1,040322,005.5,W*54";
var msg = NmeaMessage.Parse(input);
Assert.IsInstanceOfType(msg, typeof(Rmc));
Rmc rmc = (Rmc)msg;
Assert.AreEqual("GPRMC", rmc.MessageType);
Assert.AreEqual(new DateTimeOffset(2022, 3, 4, 14, 18, 25, 200, TimeSpan.Zero), rmc.FixTime);
}
[TestMethod]
public void TestGpgga()
{