猿问

反序列化 DateTimeOffset 时需要时区信息

我正在尝试验证从 API 端点获取的数据。用户应该能够发送DateTimeOffset. 目前,我正在使用自己的实现JsonConverter来验证DateTimeOffset. 我尝试过多种日期时间格式,但没有一个能像我想要的那样工作。


"yyyy-MM-ddTHH:mm:ss.fffK"

这适用于:


2010-01-01T01:01:01.000

2010-01-01T01:01:01.000Z

2010-01-01T01:01:01.000+01:00

问题是,除了它工作得很好之外,它并没有像上面的示例中那样强制指定时间偏移或 Z。


"yyyy-MM-ddTHH:mm:ss.fffzzz"

这仅适用于:


2010-01-01T01:01:01.000+01:00

它不接受 Z 作为时间偏移。是否有一种DateTimeOffset格式可以指定只接受以下内容:


2010-01-01T01:01:01.000Z

2010-01-01T01:01:01.000+01:00


PIPIONE
浏览 93回答 1
1回答

繁华开满天机

使用“K”格式说明符,该部分的空字符串相当于 a DateTime.Kindof Unspecified。因此,这就是为什么它仍然可以正确解析,但在解析中我们可以通过检查DateTime.KindDateTime属性来区分差异,如果未指定则拒绝输入。例如:var date = DateTime.ParseExact("2010-01-01T01:01:01.000", "yyyy-MM-ddTHH:mm:ss.fffK", null);if (date.Kind == DateTimeKind.Unspecified)    throw new ArgumentException("You must specify a time offset");
随时随地看视频慕课网APP
我要回答