2015-01-06 2 views
-4

У меня есть строка, и вы хотите преобразовать ее.Как преобразовать строку на сегодняшний день «141104» с 2014 годом?

Проблема заключается в том, когда новообращенный (например) "141104" ==> это будет "04/11/0014" Как я буду решать 0014 год будет 2014?

я использовал:

DateTime EntranceDeclaratioDate = new DateTime(int.Parse(outputDueNo.ThirdPart.Substring(0, 2)), int.Parse(outputDueNo.ThirdPart.Substring(2, 2)), int.Parse(outputDueNo.ThirdPart.Substring(4, 2))); 
+7

[ 'DateTime.Parse'] (http://msdn.microsoft.com/en-us/library/1k1skd40%28v=vs.110%29.aspx)? – Sayse

ответ

1

Поскольку DateTime(Int32, Int32, Int32) constructor принимает точного года в качестве первого параметра. Это не двузначное представление.

Вот почему ваш код эквивалентен

new DateTime(14, 11, 04); 

не

new DateTime(2014, 11, 04); 

Вообще, разделив вашу строку и использование этих частей в DateTime конструктор не является хорошей идеей. По крайней мере, мне это не нравится.

Вы можете использовать собственный формат форматирования даты и времени, если yyMMdd не является стандартным форматом даты и времени вашей культуры;

string s = "141104"; 
DateTime EntranceDeclaratioDate; 
if(DateTime.TryParseExact(s, "yyMMdd", CultureInfo.InvariantCulture, 
          DateTimeStyles.None, 
          out EntranceDeclaratioDate)) 
{ 
    // Successfull parsing, now EntranceDeclaratioDate is 04/11/2014 00:00:00 
} 

The "yy" specifier представляет год в виде двузначного числа. И этот спецификатор основан на Calendar.TwoDigitYearMax property вашего текущего календаря, который является Gregorian Calendar в моем примере, так как я использовал InvariantCulture как IFormatProvider.

+0

Большое спасибо –

+0

@AbdulKarimFawziShishani Добро пожаловать. –

0

Используя свой подход, год может быть исправлен путем добавления следующим образом.

DateTime EntranceDeclaratioDate 
    = new DateTime(int.Parse(outputDueNo.ThirdPart.Substring(0, 2)) + 2000, 
        int.Parse(outputDueNo.ThirdPart.Substring(2, 2)), 
        int.Parse(outputDueNo.ThirdPart.Substring(4, 2))); 

Однако я сильно второй комментарий выше, и рекомендовать использование метода DateTime.Parse.

+1

В этой строке нет начального индекса как '18'. –

+0

Да, я знал об этом, но то же самое индексирование используется в исходном вопросе. – Codor

+0

Спасибо всем, Но что, если дата была от 90-х, это не сработает ???? –

0
string outputDueNo = "141104"; 
char[] st = new char[6]; 
st=outputDueNo.ToCharArray(); 

string date = st[4].ToString() + st[5].ToString() + "/" + st[2].ToString() + st[3].ToString() + "/" + "20" + st[0].ToString() + st[1].ToString();  
DateTime ds = Convert.ToDateTime(date); 
+0

Ваш массив 'char' совершенно не нужен. Вы можете объявить символ как 'st [4]', не создавая этот массив 'st'. И нет никакой гарантии OP 'CurrentCulture' для анализа вашей строки' date'. Извините, но это плохой способ решить эту проблему. –

+0

Спасибо всем, Но что, если дата была от 90-х, это не сработает ???? –

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