Skip to content
This repository was archived by the owner on Dec 24, 2022. It is now read-only.

Commit be6c1a2

Browse files
committed
Add support for converting NSTimeInterval double in secs to TimeSpan
1 parent b069f83 commit be6c1a2

2 files changed

Lines changed: 40 additions & 1 deletion

File tree

src/ServiceStack.Text/Common/DateTimeSerializer.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -349,7 +349,15 @@ public static TimeSpan ParseTimeSpan(string dateTimeStr)
349349
{
350350
return dateTimeStr.StartsWith("P", StringComparison.Ordinal) || dateTimeStr.StartsWith("-P", StringComparison.Ordinal)
351351
? ParseXsdTimeSpan(dateTimeStr)
352-
: TimeSpan.Parse(dateTimeStr);
352+
: dateTimeStr.Contains(":")
353+
? TimeSpan.Parse(dateTimeStr)
354+
: ParseNSTimeInterval(dateTimeStr);
355+
}
356+
357+
public static TimeSpan ParseNSTimeInterval(string doubleInSecs)
358+
{
359+
var secs = double.Parse(doubleInSecs);
360+
return TimeSpan.FromSeconds(secs);
353361
}
354362

355363
public static TimeSpan ParseXsdTimeSpan(string dateTimeStr)

tests/ServiceStack.Text.Tests/Utils/DateTimeSerializerTests.cs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -591,4 +591,35 @@ public void Can_handle_invalid_format_Exceptions()
591591
}
592592
}
593593

594+
595+
[TestFixture]
596+
public class TimeSpanTests
597+
{
598+
static readonly TimeSpan Time1Y1M1H1S1MS = TimeSpan.FromDays(365)
599+
.Add(TimeSpan.FromHours(1))
600+
.Add(TimeSpan.FromMinutes(1))
601+
.Add(TimeSpan.FromSeconds(1))
602+
.Add(TimeSpan.FromMilliseconds(1));
603+
604+
[Test]
605+
public void Can_Parse_XSD_Times()
606+
{
607+
Assert.That("P365D".FromJson<TimeSpan>(), Is.EqualTo(TimeSpan.FromDays(365)));
608+
Assert.That("P365DT1H1M1.001S".FromJson<TimeSpan>(), Is.EqualTo(Time1Y1M1H1S1MS));
609+
}
610+
611+
[Test]
612+
public void Can_Parse_TimeSpan_Strings()
613+
{
614+
Assert.That("365.00:00:00".FromJson<TimeSpan>(), Is.EqualTo(TimeSpan.FromDays(365)));
615+
Assert.That("365.01:01:01.001".FromJson<TimeSpan>(), Is.EqualTo(Time1Y1M1H1S1MS));
616+
}
617+
618+
[Test]
619+
public void Can_Parse_TimeSpan_NSTimeSpan()
620+
{
621+
Assert.That("31536000".FromJson<TimeSpan>(), Is.EqualTo(TimeSpan.FromDays(365)));
622+
Assert.That("31539661.001".FromJson<TimeSpan>(), Is.EqualTo(Time1Y1M1H1S1MS));
623+
}
624+
}
594625
}

0 commit comments

Comments
 (0)