2016-03-31 3 views
3

Синтаксический "1:15 PM" легко:Как я могу разобрать «1:15 P.M.» в NodeTime LocalTime?

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

Однако, это не работает с подобными формами "1:15 PM", "1:15 PM", или «1:15 вечера "

Есть ли встроенная поддержка тех других форм спецификатора am/pm, или она должна обрабатываться с предварительной обработкой строки?

+0

FYI - BCL не поддерживает другие формы. –

+0

@JamesWorld DateTime.Parse фактически поддерживает «PM», но не «p.m.» или "P.M." – scott

+0

сначала измените строку, заменив значения, которые вам не нужны, как строка s = timestring.replace («PM», «PM»). Replace («pm», «PM») и т. Д. – rashfmnb

ответ

5

Во-первых, версия «1:15 PM» должна работать уже - это для меня.

Если вы хотите разрешить «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не работы - если вам нужно обрабатывать оба формата, вам нужно создать несколько шаблонов и увидеть, один (если таковой имеется) анализирует текст успешно.