2015-02-04 11 views
-4

Я хотел бы знать разницу между ddMMyy и ddmmyy форматами даты в C#.Разница между форматами дат ddMMyy и ddmmyy

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

byte[] bb = { 0x30, 0x34, 0x30, 0x32, 0x31, 0x35 }; 
DateTime ddmm = DateTime.ParseExact(System.Text.Encoding.ASCII.GetString(bb), "ddmmyy", System.Globalization.CultureInfo.InvariantCulture); 
DateTime ddmm1 = DateTime.ParseExact(System.Text.Encoding.ASCII.GetString(bb), "ddMMyy", System.Globalization.CultureInfo.InvariantCulture); 

ddmm переменная '4 Jan 2015' в то время как ddmm1 имеет '4 фев 2015'. Странный!!

+1

аблюдая здесь https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx 'mm' ==' и 'минутах MM' ==' Months' –

+0

Это, должно быть, первое, что вы читаете в документах, которые вы читаете, прежде чем использовать форматированные строки, конечно. – DrKoch

ответ

3

На самом деле это довольно просто.

  • mm стоит на минуту;
  • MM стоит в течение нескольких месяцев.

См. Custom Date and Time Format Strings на MSDN для получения спецификаций.

0

Форматы дат чувствительны к регистру.

MM производит две цифры номер месяца, а мм производит две цифры номера minutes.explained над here.

2

mm specifier в течение нескольких минут. MM specifier в течение нескольких месяцев.

Поскольку ваши

System.Text.Encoding.ASCII.GetString(bb) 

возвращается 040215 как string, если вы разбираете с форматом ddmmyy, ваш день часть будет разобрать, как 4, ваша минут часть будет разобрать, как 2 и ваш год часть будет синтаксического анализа как 2015, так как вы используете InvariantCulture, и это текущий календарный номер Calendar.TwoDigitYearMax property - 2029 по умолчанию.

Остальные части вашего DateTime будут их значениями по умолчанию. Вот почему ваш ddmm будет;

04/01/2015 00:02:00 // 4 Jan 2015 2 AM. 

Но если вы разбираете с форматом ddMMyy, ваш день часть будет разобрать, как 4, ваш месяц часть будет разобрана как 2 и ваш год часть будет разобрана как 2015 и другие частями еще ваши DateTime будут их значениями по умолчанию.

Именно поэтому ваш ddmm1 будет;

04/02/2015 00:00:00 // 4 Feb 2015 midnight 
+0

Если в обоих направлениях часть минут будет разглашать как 2, то почему Ян в 1-м случае и фев в другом. – user2861226

+0

@ user2861226 № Пожалуйста, перечитайте мой ответ. Когда вы используете формат 'ddmmyy', ваша ** минутная ** часть будет анализироваться как' 2', но когда вы будете использовать формат 'ddMMyy', ваша часть ** месяца ** будет проанализирована как' 2'.В обоих случаях всем другим неформатированным частям присваиваются значения _default_. Поэтому, когда вы используете 'ddmmyy', ваш' DateTime' будет '04/01/2015 00: 02: 00', так как вы указали только один день, минуты и год в вашем формате, другие части вашего' DateTime' (месяц , часов и секунд) будут присвоены значения по умолчанию, которые равны «1», «0» и «0». Это то же самое, что и для другого случая. –

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