2014-09-01 2 views
2

Итак, у меня есть дата, хранящаяся в британском формате (дд/мм/гг), который мне нужно отображать в локали, где бы он ни находился.Как отображать дату в локали для 0 значений?

Вопрос заключается в том, что эта дата может быть 000000 (00/00/2000); поэтому я не могу напрямую преобразовать его в DateTime, так как DateTime не поддерживает 0 значений за день или месяц.

меня это до сих пор:

int dateInt = ddmmyy; 
var year = (dateInt % 100) + 2000; 
var month = (dateInt/100) % 100; 
var day = (dateInt/100000); 

var result = new DateTime(year, month, day); //2014/00/00 at this point, so breaks. 

var resultStr = result.ToString(CultureInfo.InvariantCulture); 
return resultStr; 

Что такое правильный способ, чтобы добавить поддержку 0 значения изначально? Я попытался изменить 0 на 1 перед преобразованием в DateTime, запустив преобразование, а затем снова заменив 0; но из-за вариантов культуры я не вижу способа, которым этот метод может поддерживать другие культуры, цель которых заключается в этом преобразовании.

Любые идеи? Я предполагаю, что это обычная проблема.

+0

Как насчет if (ddmmyy == 0) return new DateTime (2000,1,1); После первой строки –

+1

@GeorgeVovos Это всего лишь один случай. Общее решение должно быть предоставлено .. –

+1

@ SonerGönül из того, что я понял, только 000000 был единственным недопустимым значением –

ответ

1

Это то, что вам нужно?

using System; 

namespace ConsoleApplication2 
{ 
class Program 
{ 
    static void Main(string[] args) 
    { 
     int[] savedDates = new int[] { 000000, 010000, 000013 }; 

     foreach (var item in savedDates) 
     { 
      DateTime date = ConvertToDate(item); 
      Console.WriteLine(item.ToString("D6") + " => " + date.ToShortDateString()); 
     } 
     Console.ReadLine(); 
    } 

    private static DateTime ConvertToDate(int item) 
    { 
     string temp = item.ToString("D6"); 
     int day = int.Parse(temp.Substring(0, 2)); 
     int month = int.Parse(temp.Substring(2, 2)); 
     int year = int.Parse(temp.Substring(4, 2)); 

     if (day == 0) 
      day = 1; 

     if (month == 0) 
      month = 1; 

     year += 2000; 


     return new DateTime(year, month, day); 
    } 
} 
} 
+0

Я использовал что-то похожее на это, чтобы заставить его работать правильно, спасибо за помощь. :-) – user3420034

0

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

Лучшим способом хранения дат будет использование Culture.InvariantCulture для случаев преобразования строк, а затем, при необходимости, преобразование в местную культуру. DateTime сам по себе не зависит от культуры, поэтому преобразование между культурами очень просто.

+0

К сожалению, я не являюсь создателем системы, в которой хранятся даты, поэтому мне приходится работать с что мне дано. :/ – user3420034

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

  • Нет связанных вопросов^_^