我怎样才能解析" 1:15 P.M。"进入NodaTime LocalTime?

时间:2016-03-31 15:56:01

标签: c# nodatime

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

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

然而,这并不适用于类似的形式" 1:15 PM"," 1:15 PM"或" 1:15 pm "

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

1 个答案:

答案 0 :(得分:5)

首先,"下午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 不会工作 - 如果您需要处理这两种格式,则需要创建多个模式并查看哪个模式(如果有)成功解析文本。