Parsing "1:15 pm" is easy:
var pattern = LocalTimePattern.CreateWithInvariantCulture("h:mm tt");
var time = pattern.Parse("1:15 pm").Value;
However, this doesn't work with the similar forms "1:15 P.M.", "1:15 PM", or "1:15 p.m."
Is there any built in support for those other forms of am/pm specifier, or does it need to be handled with string pre-processing?
Firstly, the "1:15 PM" version should work already - it does for me.
If you want to allow "P.M" or "p.m". you'll need to create a culture with appropriate AM/PM signifiers. That's easy enough to do:
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);
}
}
However, note that at this point, pm
and am
won't work - if you need to handle both formats, you'll need to create multiple patterns and see which one (if any) parses the text successfully.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With