Noda Time 1.2がリリースされた。XMLとバイナリのシリアライゼーションとテキストフォーマッティングに加えて,JSONのシリアライゼーションを扱うアセンブリをオプションでサポートする。Duration, OffsetDateTime, ZonedDateTimeといった型のフォーマットおよび解析,Interval.Contains(), ZonedDateTime.Calendar()などメソッドの他,いくつかのバグも修正された。
今回のリリースではNodaTime.Serialization.JsonNetアセンブリがサポートされる。Json.NET 4.5.11を使って実装された,モバイルとデスクトップいずれのプラットフォームでも利用可能なアセンブリだ。JsonSerialierとJsonSerializerSettingsにはConfigureForNodaTimeという拡張メソッドが提供されている。またNodaConvertersには,各コンバータ用にpublicでstaticな読み取り専用フィールドが用意された。これらはすべて不変(immutable)だが,NodaPatternConverterを使ったパターンから独自コンバータを容易に作成できる。
Noda Time 1.2ではAPIにもいくつか変更が加えられて,DurationPattern, OffsetDateTimePattern, ZonedDateTimePatternなどの新しいクラスが導入された。それぞれがDuration, OffsetDateTime, ZonedDataTimeの解析パターンを表している。GeneralIsoPattern, BclRoundtripPattern, FullRoundtripPatternなど,o/Oやr,あるいはsパターンへのプログラムからのアクセスを提供する,新しいプロパティも含まれている。また今回のリリースではDateTimeZoneNotFoundExceptionやCalendarSystem,あるいはInvalidNodaDataExceptionといったクラスがSealedされた。
Noda Time 1.2では,Instant, OffsetDateTime, ZonedDateTime, LocalDateTime, LocalDate, LocalTime, Offset, Interval, Duration, PeriodBuilderが IXmlSerializableを実装していて,シリアライズ可能になっている。さらにISerializableも実装しているので, [Serializable] 属性を使用すれば,BinaryFormatterを使用したシリアライズも可能だ。
最新リリースにはInstantPatternも含まれている。WithMinMaxLabels()メソッドは,Insitantの最小および最大値のフォーマットに用いるテキストを置き換えることができる。また,新しいEra.AnnoMartyrumは,それまであったAnnoMartyrmの名称誤りを置き換えるものだ。さらにはInterval.Contains(), ZonedDateTime.Calendar, ZonedDateTime.GetZoneInterval()といったメソッドに加えて,GetValueOrThrow()メソッドによってスローされる例外に直接アクセスするためのParseResult.Exceptionが追加されている。
Noda Time 1.2では,Period.Between() がうるう年付近の月末にコールされると正と負の値を混在した結果を返すバグ,およびlong,MaxValueを越える数のチックでPeriodを作成したときに発生する不正なオーバーフローがフィックスされている。また既存のInstantパターンn, g, およびdの大文字エイリアスが,今回のリリースで削除されている。