2013-12-03 7 views
2

Я получаю результат вроде этого «PR242714031213» из SQL-запроса. Это в основном строка PR + ssmmHHddMMyy. Мне нужно извлечь и отформатировать его до простой даты ddMMyyyy. Я использую следующий фрагмент кода с подстрок, который работает:Упростить разделение строк

string rawDate = (string)lastProjaddedDate.ExecuteScalar(); 
      string year= rawDate.Substring(12,2); 
      string month=rawDate.Substring(10,2); 
      string day=rawDate.Substring(8,2); 
      string date = day + "/" + month + "/" +"20"+ year; 
      Label4.Text =date; 

мне интересно, если я могу упростить код, чтобы получить DDMMYYYY из него.

PS: Я знаю, что мне нужно изменить способ кодирования в БД, чтобы избежать проблем за несколько десятилетий, но давайте начнем его упрощать.

+0

Вздох. Это разбитая схема схемы базы данных. Все даты должны быть в столбце даты –

+0

@JoelCoehoorn, случается, когда вы работаете над кодом другого, чтобы исправить его. – FeliceM

ответ

4

Вы можете сделать:

Step - 1: Strip `PR` from the string 
Step - 2: Parse to .Net `DateTime` object 
Step - 3: Format to required format 

Код:

string rawDate = "PR242714031213"; 
rawDate = rawDate.Substring(2); 
DateTime dt; 

if (!DateTime.TryParseExact(rawDate, 
          "ssmmHHddMMyy", 
          CultureInfo.InvariantCulture, 
          DateTimeStyles.None, 
          out dt)) 
{ 
    //invalid date 
} 

string formattedDate = dt.ToString("ddMMyyyy"); 

В одном заявлении было бы:

string formattedDate = DateTime.ParseExact(rawDate.Substring(2), 
          "ssmmHHddMMyy", 
          CultureInfo.InvariantCulture) 
          .ToString("ddMMyyy"); 
+0

Активировано, потому что использование 'DateTime.TryParseExact' также означает, что вы пользуетесь проверкой даты (например, если вы не получите 30 февраля). – Dai

+0

Элегантный и первый рабочий ответ. Спасибо. – FeliceM

+0

@FeliceM, добро пожаловать – Habib

3

Предполагая, что вы обновляете путь даты хранятся в БД все вам необходимо:

DateTime.ParseExact(rawDate.Substring(2), "ssmmHHddMMyyyy", CultureInfo.InvariantCulture).ToString("ddMMyyyy"); 

В противном случае используйте следующий до поры до времени:

DateTime.ParseExact(rawDate.Substring(2), "ssmmHHddMMyy", CultureInfo.InvariantCulture).ToString("ddMMyyyy"); 

В любом случае, вы можете выбрать любой формат, который вы хотите в методе ToString().

+0

Юрген, тысячелетие и веки не находятся в результатах запроса. Поэтому я не могу этого сделать. – FeliceM

+0

Отредактировано для вашего конкретного сценария. –

+1

Спасибо, второй рабочий ответ. + – FeliceM

0

Регулярное выражение даст вам краткий код с проверкой в ​​качестве бонуса:

var match = Regex.Match(rawDate, @"PR\d{6}(?<d>\d\d)(?<m>\d\d)(?<y>\d\d)"); 
string date = match.Groups["d"].Value + "/" + match.Groups["m"].Value + "/20" + match.Groups["y"].Value; 
Смежные вопросы