2013-08-29 6 views
3

Могут ли я преобразовать строку ниже DateTimeПреобразовать строку в DateTime и формат

пятницы, 27 сентября 2013

Это то, что я хочу добиться:

String tmpDate="Friday, 27th September 2013"; 
closingDate = Convert.ToDateTime(tmpDate).ToString("yyyy-MM-dd"); 

Doing выше я получаю ошибку :

The string was not recognized as a valid DateTime. There is an unknown word starting at index 10.

+0

Вы получаете сообщение об ошибке? Как насчет этого не работает? – htxryan

+0

@RyanHenderson Я получаю сообщение об ошибке в quesitons. – confusedMind

+1

см. Эту ссылку ... http: // stackoverflow.com/questions/16978359/c-sharp-to-convert-string-to-datetime –

ответ

3

Ну, я не уверен, что именно решение с -th, -st, -nd, но вы можете использовать это как;

string tmpDate = "Friday, 27 September 2013"; 
DateTime dt = DateTime.ParseExact(tmpDate, 
            "dddd, dd MMMM yyyy", 
            CultureInfo.InvariantCulture); 

Здесь DEMO.

Я почти предлагаю вам удалить -th, -st и -nd часть вашей строки, но они нарушают правила :)

  • августа
  • Понедельник
  • Четверг
  • Воскресенье

Также проверьте Habib's answer который кажется хороший.

+0

Thanx много, но я должен выбрать тот, который первым ответил и правильно, так как это справедливо. Еще раз, спасибо. – confusedMind

+1

@confusedMind: Всегда выбирайте ответ _best_, если есть несколько одинаковых, выберите первый. SO высоко оценивает самые быстрые результаты. Качество должно наконец победить. –

-2

См http://msdn.microsoft.com/en-us/library/system.datetime.parse.aspx

public class Example 
{ 
public static void Main() 
{ 
    string[] dateStrings = {"2008-05-01T07:34:42-5:00", 
          "2008-05-01 7:34:42Z", 
          "Thu, 01 May 2008 07:34:42 GMT"}; 
    foreach (string dateString in dateStrings) 
    { 
    DateTime convertedDate = DateTime.Parse(dateString); 
    Console.WriteLine("Converted {0} to {1} time {2}", 
         dateString, 
         convertedDate.Kind.ToString(), 
         convertedDate); 
    }        
} 
} 
+0

не работает для меня, потому что я предполагаю, поэтому мне нужно удалить это (th, st, nd) – confusedMind

1

Ваш ответ в том исключении, которое вы получаете. Очевидно, что «th» здесь не требуется. Просто удалите его, и вы хорошо пойдете.

Это работает прекрасно для меня

String tmpDate = "Friday, 27 September 2013"; 
closingDate = Convert.ToDateTime(tmpDate).ToString("yyyy-MM-dd"); 
0

вам нужно будет удалить th, nd, rd и st вручную, так как нет никакого формата, который учитывает их. После этого вы можете использовать попытаться разобрать точное, как показано ниже

String tmpDate = "Friday, 27th September 2013"; 
tmpDate = tmpDate.Replace("nd", "") 
      .Replace("th", "") 
      .Replace("rd", "") 
      .Replace("st", "");    
string[] formats = { "dddd, dd MMMM yyyy" }; 
DateTime dt; 
if (DateTime.TryParseExact(tmpDate, formats, CultureInfo.InvariantCulture, DateTimeStyles.NoCurrentDateDefault, out dt)) 
{ 
    //parsing is successful 
} 
2

Вы можете сохранить порядковые удалить в массиве, как это (что может сделать его проще добавить/удалить числительные из других языков). Таким образом, вам не нужно вручную удалять порядковый номер из каждого ввода строки. Использование TryParseExact исключает исключение, если DateTime не может быть проанализирован из строки.

String tmpDate = "Friday, 27th September 2013"; 
string[] split = tmpDate.Split(); 
string[] ordinals = new string[] { "th", "nd", "st" }; 

foreach (string ord in ordinals) 
    split[1] = split[1].Replace(ord, ""); 

tmpDate = String.Join(" ", split); 
DateTime dt; 
if(DateTime.TryParseExact(tmpDate, "dddd, dd MMMM yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out dt)) 
{ 
    Console.WriteLine("Parsed"); 
} 
else 
{ 
    Console.WriteLine("Could not parse"); 
} 
+0

, но если месяц «Август», это заменит его как «Аугу»? –

+0

Нет, потому что split [1] всегда должен быть числовой датой, а не месяцем, если формат согласован. Если формат изменится, то «TryParseExact» в любом случае потерпит неудачу, так что это будет другая проблема. – keyboardP

+0

Но ваше решение не может разобрать «Пятница, 27 августа 2013 года»? –

0

Предполагая, что формат строки даты, которую вы предоставляете, не изменяется, -st, -nd и -th можно легко удалить (как уже было предложено).

Также не забудьте указать действительную (существующую) дату или исключение System.FormatException.

string tmpDate = "Friday, 27th September 2013"; 

string[] splitDate = tmpDate.Split(new Char[] {' '}); 
splitDate[1] = splitDate[1].Substring(0, splitDate[1].Length-2); 
string tmpDatewithoutStNdTh = String.Join(" ", splitDate); 

try{ 
    string closingDate = Convert.ToDateTime(tmpDatewithoutStNdTh).ToString("yyyy-MM-dd"); 
    Console.WriteLine(closingDate.ToString()); 
} 
catch(System.FormatException) 
{ 
    Console.WriteLine("The provided date does not exist."); 
} 
Смежные вопросы