我在尝试将字符串解析为NodaTime LocalDate时遇到问题。我的代码如下所示:
var value = "Monday, May 26, 2014";
var pattern = LocalDatePattern.CreateWithInvariantCulture("d");
var parseResult = pattern.Parse(value);
var localDate = parseResult.GetValueOrThrow();
这总是会导致UnparsableValueException:
附加信息:值字符串与格式字符串" MM"中所需的数字不匹配。
据我所知,我的值应符合标准模式(当我查看模式的示例模板值时,它看起来非常像我试图解析的值)。我在这里缺少什么?
修改
我将代码更改为以下内容,但仍然收到类似的错误:
var value = "Monday, May 26, 2014";
var pattern = LocalDatePattern.CreateWithInvariantCulture("dddd, dd MMMM, yyyy");
var parseResult = pattern.Parse(value);
var localDate = parseResult.GetValueOrThrow();
导致另一个UnparsableValueException:
附加信息:值字符串与格式字符串" dd"中所需的数字不匹配。
答案 0 :(得分:3)
这里的主要问题是你使用的模式是" dd MMMM" (在这两种情况下),但您的输入是" MMMM dd"。 (对于" D",您还有一个问题,即长日期模式在您的输入中没有包含年份之前的逗号。)
以下解析上面的输入,并演示了如何使用Format()
调试预期的输入:
var pattern = LocalDatePattern.CreateWithInvariantCulture("dddd, MMMM dd, yyyy");
Console.WriteLine("Expecting input {0}.", pattern.Format(new LocalDate(2014, 5, 26)));
var value = "Monday, May 26, 2014";
var parseResult = pattern.Parse(value);
var localDate = parseResult.GetValueOrThrow();
Console.WriteLine("Parsed value is {0}.", localDate);
答案 1 :(得分:1)
看起来他们翻了个例子。短日期模式(由d
表示)是" MM / dd / yyyy"。您需要长日期模式,由D
表示。