Optional seconds when serializing NodaTime.LocalTime?

351 views Asked by At

Is it possible to make a pattern for NodaTime's LocalTime, which matches the ISO 8601 standard for times? That is, can you make (minutes and) seconds optional, like you can make fractional seconds optional? I wish to be able to always have hours and minutes, but add everything else only when needed.

1

There are 1 answers

1
Matt Johnson-Pint On

This doesn't exist in NodaTime currently, nor does it exist as an option for the built in DateTime and DateTimeOffset objects.

Probably the best you could do is to create two patterns and add some logic for which to use.

var p1 = LocalTimePattern.ExtendedIsoPattern;
var p2 = LocalTimePattern.CreateWithInvariantCulture("HH:mm");

// formatting
LocalTime t = // your input
var p = t.Second == 0 && t.TickOfSecond == 0 ? p2 : p1;
string s = t.Format(p);

// parsing
string s = // your input
var result = p1.Parse(s);
if (!result.Success)
    result = p2.Parse(s);
if (!result.Success)
    // throw some exception, etc.
LocalTime t = result.Value;