如何将"1:15 PM"解析为NodaTime LocalTime?

sco*_*ott 4 c# nodatime

解析"下午1:15"很容易:

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

但是,这不适用于"1:15 PM","1:15 PM"或"1:15 pm"的类似表格

是否内置支持其他形式的am/pm说明符,还是需要使用字符串预处理进行处理?

Jon*_*eet 6

首先,"1:15 PM"版本应该已经有效 - 它对我有用.

如果你想允许"PM"或"pm".您需要使用适当的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);
    }   
}
Run Code Online (Sandbox Code Playgroud)

但请注意,此时,pm并且am 无法工作 - 如果需要处理这两种格式,则需要创建多个模式,并查看哪一个(如果有)成功解析文本.