- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试反序列化一个 JSON,其中包含格式为 2017-10-26 13:32:11 Etc/GMT
的日期。 NodaTime与 Json.NET 结合使用时似乎支持这一点和 NodaTime.Serialization.JsonNet .我在 StackOverflow 上找到了一些信息,这些信息使我可以仅使用 NodaTime 来完成这项工作:
var date = "2017-10-26 13:32:11 Etc/GMT";
var pattern = ZonedDateTimePattern.CreateWithInvariantCulture(
"yyyy'-'MM'-'dd HH':'mm':'ss z",
DateTimeZoneProviders.Tzdb
);
var result = pattern.Parse(date);
但是,当将此示例扩展为使用其他两个包反序列化 JSON 时,我无法使其正常工作。通过阅读文档和其他资源,我相信这应该有效:
public class DateObj
{
public ZonedDateTime Date { get; set; }
}
void Main()
{
var date = "2017-10-26 13:32:11 Etc/GMT";
var json = $"{{\"Date\": \"{date}\"}}";
var pattern = ZonedDateTimePattern.CreateWithInvariantCulture(
"yyyy-MM-dd HH:mm:ss z",
DateTimeZoneProviders.Serialization
);
var settings = new JsonSerializerSettings();
settings.ConfigureForNodaTime(pattern.ZoneProvider);
var dateObj = JsonConvert.DeserializeObject<DateObj>(json, settings);
}
但它会在最后一行抛出异常,提示 The value string does not match a quoted string in the pattern.正在解析的值:'2017-10-26^ 13:32:11 Etc/GMT'。 (^ 表示错误位置。)
。我做错了什么?
最佳答案
目前,您正在创建一个特定的 ZonedDateTime
模式 - 但您实际上并没有在任何地方告诉 Json.NET 该模式。
如果这是唯一您需要使用的 Noda Time 类型,我建议您根本不要调用 ConfigureForNodaTime
- 因为这将配置一个ZonedDateTime
格式错误的转换器。我们有code internal to NodaTime.Serialization.JsonNet更换转换器,但目前还没有公开。 (也许我们应该这样做……)
尽管创建一个转换器并为其配置设置很简单:
var settings = new JsonSerializerSettings
{
DateParseHandling = DateParseHandling.None,
Converters = { new NodaPatternConverter<ZonedDateTime>(pattern) }
};
这是在完整程序的上下文中的样子。请注意,我在这里明确使用 DateTimeZoneProviders.Tzdb
,而不是 DateTimeZoneProviders.Serialization
,因为您肯定有 TZDB 标识符:
using Newtonsoft.Json;
using NodaTime;
using NodaTime.Serialization.JsonNet;
using NodaTime.Text;
using System;
public class DateObj
{
public ZonedDateTime Date { get; set; }
}
class Program
{
static void Main()
{
var date = "2017-10-26 13:32:11 Etc/GMT";
var json = $"{{\"Date\": \"{date}\"}}";
var pattern = ZonedDateTimePattern.CreateWithInvariantCulture(
"yyyy-MM-dd HH:mm:ss z",
DateTimeZoneProviders.Tzdb
);
var settings = new JsonSerializerSettings
{
DateParseHandling = DateParseHandling.None,
Converters = { new NodaPatternConverter<ZonedDateTime>(pattern) }
};
var dateObj = JsonConvert.DeserializeObject<DateObj>(json, settings);
Console.WriteLine(dateObj.Date);
}
}
关于c# - 让 NodaTime.Serialization.JsonNet 使用自定义日期格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47311121/
Nodatime 库中有工作日的概念吗? 我想要做的是以某种方式声明一个日历周有 5 个工作日,然后能够提出以下问题: 从 [任何给定日期] + 10 个工作日开始,什么是结束日期? 或者 从[这个日
我正在尝试学习如何在我的应用程序中使用 NodaTime,但找不到很多关于如何使用此库执行某些操作的示例。 鉴于: "2012/08/30 17:45:00" 的日期/时间文本 格式字符串是 "yyy
我使用的是最新版本的 NodaTime和 Mongo DB Official Driver .我有一个简单的 POCO 类,它使用 NodaTime 的 ZonedDateTime作为一些属性中 .N
目前,我正在尝试使用 JsonFormatters用于序列化 ISO 8601 中的字符串规范格式在我的启动配置中,但无法使其工作。 我的启动配置如下: services.AddMvcCore(
我在将时间值反序列化为 LocalTime 时遇到问题 - 当然,我是 NodaTime 的新手。我想导入一个以“HH:mm”格式列出时间的 Web 服务结果。除非我使用“hh:mm:ss.fff”格
我需要使用NodaTime计算两个日期之间的天数,并在时区中进行计算。 结束时间是基于日期的,其隐含的时间是一天结束时的午夜。该日期是一个时区。 开始时间是当前时间,但是我正在将其传递给函数,以便可以
我需要确定现在到下次出现本地时间之间的持续时间。这是我得到的: Duration GetDuration(IClock clock, LocalTime time, DateTimeZone zone
我有一种情况,相对时间对用户来说比绝对时间更重要。因此,能够快速说出“事件发生在 5 天 5 小时前”比“事件发生在 CDT 下午 1 点,现在是 5 天后 CST 下午 5 点”更重要。 我们以 U
我喜欢使用*Pattern命名空间中的各种NodaTime.Text类型来对格式和解析值进行Noda Time处理。但是,用户输入通常不如单一格式那么规则。例如,我们的应用程序使用时间格式"h:mm
我越来越了解NodaTime并且非常喜欢它。但是我还不太了解! 给定诸如“ 2014-04-08T09:30:18Z”的值,将这样的字符串解析为NodaTime Instant所需的步骤是什么? 谢谢
似乎 Nodatime 使用的时区数据库文件是按年份命名的,同一年内的版本以 a 递增字母 - 即“tzdb2019a.nzd”在我写这篇文章时是最新的,下一个版本将是“tzdb2019b.nzd”,
我正在使用 NodaTime,我以纪元以来的滴答形式存储时间信息。 但是,我想将自 unix 纪元以来的毫秒数传递回客户端浏览器,因此我可以构造一个 javascript Date() 对象。有没有办
我要求管理员选择一些 countries List和 Time for Alert对于该国家/地区列表的用户。 假设管理员选择 24/07/2014 09:00 AM在国家India,Malaysia
在 NodaTime 中,如何根据 tz 时区 ID 找到时区的长格式名称? 例如,如果我提供“America/Los_Angeles”,我应该返回“太平洋标准时间”。 最佳答案 生成“长格式”时区名
我有一些 LocalDateTime s,我需要根据定义的分钟列表将一天中的时间向上/向下舍入到最接近的分钟数。 例如,如果我有日期时间 2018-03-20T12:13:47 并且我必须将它舍入到下
为什么结果为periodBetween.Days和 substracted.Days不同的? 我可以看到一个 periodBetween.Months是 0 和 substracted.Months是
我想创建一个自定义(不存在的)时区,它遵循与欧洲/伦敦完全相同的规则,但唯一的区别是偏移量应为距 UTC -5 小时。 出于测试目的,这就是我正在尝试的。如何指定夏令时?或者这个实现是完全错误的?
我使用 Noda Time为了处理 DateTime 问题,我阅读了几乎所有 documents但是我在相互转换日历时遇到了一些问题, 首先,Noda支持多少种日历? 正如 CalendarSyste
我必须处理由各种外部系统发送的也包含一些日期的 XML 文档。 xs:date 允许向日期添加“时区”,即偏移量。例如。 “2017-06-02+03:00” 是有效值。此外,在单个 XML 文档中偏
我正在研究 writing a managed wrapper around Massachusetts Bay Transportation Authority (MBTA) Realtime AP
我是一名优秀的程序员,十分优秀!