如何解析“1:15 P.M”。进入NodaTime LocalTime?

How can I parse "1:15 P.M." into a NodaTime LocalTime?

解析“1:15 pm”很容易:

var pattern = LocalTimePattern.CreateWithInvariantCulture("h:mm tt");
var time = pattern.Parse("1:15 pm").Value;

但是,这不适用于类似的形式“1:15 P.M”、“1:15 PM”或“1:15 p.m”。

是否内置了对其他形式的 am/pm 说明符的支持,或者是否需要使用字符串预处理来处理?

首先,“下午 1 点 15 分”版本应该已经可以使用了 - 它适合我。

如果要允许"P.M"或"p.m"。您需要创建一种具有适当 AM/PM 符号的文化。这很容易做到:

using System;
using System.Globalization;
using NodaTime.Text;
using NodaTime;

class Program
{
    static void Main()
    {
        var culture = (CultureInfo) CultureInfo.InvariantCulture.Clone();
        culture.DateTimeFormat.AMDesignator = "a.m.";
        culture.DateTimeFormat.PMDesignator = "p.m.";
        string text = "1:15 P.M.";
        var pattern = LocalTimePattern.Create("h:mm tt", culture);
        var value = pattern.Parse(text).Value;
        Console.WriteLine(value);
    }   
}

但是,请注意,此时 pmam 将不起作用 - 如果您需要处理这两种格式,您将需要创建多个模式并查看哪一个(如果有)成功解析文本。