从标准模式解析NodaTime LocalDate的问题

时间:2014-05-30 23:22:14

标签: c# nodatime

我在尝试将字符串解析为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"中所需的数字不匹配。

2 个答案:

答案 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表示。