如何解析“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);
}
}
但是,请注意,此时 pm
和 am
将不起作用 - 如果您需要处理这两种格式,您将需要创建多个模式并查看哪一个(如果有)成功解析文本。
解析“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);
}
}
但是,请注意,此时 pm
和 am
将不起作用 - 如果您需要处理这两种格式,您将需要创建多个模式并查看哪一个(如果有)成功解析文本。