2015-04-20 3 views
1

Рассмотрим следующую строку ...DateTime.ParseExact AM/индикатор PM в нижнем регистре

var myString = "11/05/2015 01:04:16 p.m." 

Могу ли я выполнить DateTime.ParseExact на эту строку, не заставляя строку в верхний регистр? Индикатор am/pm дает мне печаль и не анализирует, потому что это строчный регистр. У меня есть статический класс с константами для строк формата. Есть ли маркер формата для указания строчного индикатора am/pm?

Формат Строки

namespace myProgram 
{ 
    public static class MyFormatStrings 
    { 
     public const string MyDateTimeFormat = "dd/MM/yyyy hh:mm:ss t\\.\\M\\."; 
    } 
} 

логики для анализа

namespace myProgram 
{ 
    public static class MyProgram 
    { 
     public void MyMethod() 
     { 
      var myStringDateValue = "11/05/2015 01:04:16 p.m."; 
      var result = DateTime.ParseExact(myStringDateValue, MyFormatStrings.MyDateTimeFormat, CultureInfo.InvariantCulture); 
     } 
    } 
} 
+0

Может быть, потому, что первая и вторая половина как правило, не первая и вторая половина ? Попробуйте просто заменить п.м. и a.m. с am или pm (или просто удалить все .s во входной строке). –

+0

@Ron - Я ограничен вводом. Я должен принять строку в формате, показанном выше. Хотите сохранить его простым с помощью строки формата и не манипулировать исходной входной строкой. – barrypicker

+0

Вы не могли бы сделать что-то вроде (DateTime.ParseExact (myStringDateValue.Replace (".", ""), ...)? Я не уверен, что строки формата даты и времени могут указывать в строке, см. https://msdn.microsoft.com/en-us/library/8kb3ddd4%28v=vs.110%29.aspx#ttSpecifier –

ответ

4

Вы можете изменить AMDesignator/PMDesignator в DateFormatInfo в вашей культуре.

Эта информация ReadOnly так, вы должны создать свою собственную культуру:

Я также изменил формат MyDateTimeFormat поэтому он может работать:

public class MyCultureInfo : CultureInfo 
    { 
     public MyCultureInfo():base(CultureInfo.InvariantCulture.Name) 
     { 
     } 
     public override DateTimeFormatInfo DateTimeFormat 
     { 
      get 
      { 
       DateTimeFormatInfo myDateTimeFormatInfo = base.DateTimeFormat; 
       myDateTimeFormatInfo.PMDesignator = "p.m."; 
       myDateTimeFormatInfo.AMDesignator = "a.m."; 
       return myDateTimeFormatInfo; 
      } 
      set 
      { 
       base.DateTimeFormat = value; 
      } 
     } 
    } 
    public static class MyFormat 
    { 
     public const string MyDateTimeFormat = "dd/MM/yyyy hh:mm:ss tt"; 
    } 
    static int Main(string[] args) 
    { 
     var myStringDateValue = "11/05/2015 01:04:16 p.m."; 
     var result = DateTime.ParseExact(myStringDateValue, MyFormat.MyDateTimeFormat, new MyCultureInfo()); 
    } 
+0

Я надеялся на быструю строку форматирования, но это работает. Это тоже довольно крутой ответ - никогда не знал, что я могу определить собственную культуру. – barrypicker

+0

Я тоже, пока не увижу ваш вопрос;) –

Смежные вопросы