我使用NodaTime,版本= 2.2.3.0 我已经设置了一个匹配各种即时模式的模式 最后一个模式应该与下面的例子相匹配。
IPattern<Instant> pattern = new CompositePatternBuilder<Instant>
{
{ InstantPattern.CreateWithInvariantCulture("yyyy'-'MM'-'dd HH':'mm':'ss.FFFFFFF") , _ => true },
{ InstantPattern.CreateWithInvariantCulture("MM'/'dd'/'yyyy HH':'mm':'ss.FFFFFFF") , _ => false },
{ InstantPattern.CreateWithInvariantCulture("dd'-'MM'-'yyyy HH':'mm':'ss.FFFFFFF") , _ => false },
{ InstantPattern.CreateWithInvariantCulture("dd'/'MM'/'yyyy HH':'mm':'ss.FFFFFFF") , _ => false },
{ InstantPattern.CreateWithInvariantCulture("M'/'dd'/'yyyy HH':'mm':'ss.FFFFFFF") , _ => false },
{ InstantPattern.CreateWithInvariantCulture("MM'/'dd'/'yyyy HH':'mm':'ss.FFFFFFF") , _ => false },
{ InstantPattern.CreateWithInvariantCulture("M.d.yyyy HH':'mm':'ss.FFFFFFF") , _ => false },
{ InstantPattern.CreateWithInvariantCulture("dd.MM.yyyy HH':'mm':'ss.FFFFFFF") , _ => false },
{ InstantPattern.CreateWithInvariantCulture("M'/'d'/'yyyy H':'mm':'ss tt") , _ => false },
{ InstantPattern.CreateWithInvariantCulture("M'/'d'/'yyyy HH':'mm':'ss tt") , _ => false },
}
.Build();
我可以先解析两个
但不是第三个。为什么?
错误消息表示字符串第一个位置出现“^ 1/11/208 12:25:59 AM”错误。
答案 0 :(得分:1)
首先,我认为你实际上并不需要那么多模式 - 例如,我怀疑你不需要<h1><span class="badge" id="loginbtn">main</span></h1>
和M
版本。
但问题是您在MM
使用HH
。 tt
表示&#34; 24小时制&#34;,因此值12表示12点...但是您的值指定它是AM。
如果查看异常消息,它会尝试清除:
未处理的异常:NodaTime.Text.UnparsableValueException:字段的各个值&#39; H&#39;并且&#39; t&#39;在NodaTime.LocalTime类型中创建了一个不一致。正在解析的价值:&#39; 1/11/2018 12:25:59 AM&#39;。
基本上,您应该使用HH
代替:
h
(请注意,您不需要逃避var pattern = InstantPattern.CreateWithInvariantCulture("M/d/yyyy h:mm:ss tt");
和/
- 虽然他们对文化非常敏感,但您使用的是使用{{1}值的不变文化无论如何,只有将它们保留为未转义状态才更简单。:
在/
中没有特殊含义,因此不需要转义。)
您的前两个值不会失败的原因是,在这些情况下,指定的24小时小时符合AM / PM指定。 &#34; 10&#34;是在上午,&#34; 12&#34;在下午。