https://nodatime.org/2.0.x/userguide/migration-to-2で読むことができるように、インスタントの数値書式設定のサポートは削除されました。2.x.xの数値(Unix)形式のInstantのためのNodaPatternConverter
現在、UNIX /ティック形式に変換して戻すNodaPatternConverterを作成する方法はありますか?次の例外で
SystemClock.Instance.GetCurrentInstant().ToString("d", CultureInfo.InvariantCulture);
結果:
NodaTime.Text.InvalidPatternException : The standard format "d" is not valid for the NodaTime.Instant type.
私が実装し終わってきたジョンの提案に基づくソリューション:
public class InstantUnixTicksConverter : NodaConverterBase<Instant>
{
protected override Instant ReadJsonImpl(JsonReader reader, JsonSerializer serializer)
{
string text = reader.Value.ToString();
if (!long.TryParse(text, out var ticks))
{
throw new InvalidNodaDataException($"Value \'{text}\'cannot be parsed as numeric format {reader.TokenType}.");
}
return Instant.FromUnixTimeTicks(ticks);
}
protected override void WriteJsonImpl(JsonWriter writer, Instant value, JsonSerializer serializer)
{
writer.WriteValue(value.ToUnixTimeTicks());
}
}