Можно ли заставить тип данных принимать 13 как месяц и 30 за все месяцы? - PullRequest
9 голосов
/ 03 февраля 2010

Я в Эфиопии и у нас 13 месяцев.12 из них с 30 днями каждый и 13-й месяц с 5 или 6 днями.Я хочу отсортировать данные по дате, используя метод сортировки BindingSource.Но для этого мне нужно установить в поле даты тип данных date.Когда я устанавливаю DataType в качестве даты, я не могу ввести некоторые значения, например, 13 для значения месяца и 30 для значения дня 2-го месяца.

Мне нужно только, чтобы приложение приняло 13 какмесяц и 30 как день для всех месяцев, чтобы я мог отсортировать свои данные по дате.Можно ли это сделать, установив культуру для моего приложения или каким-либо другим способом?

Ответы [ 2 ]

3 голосов
/ 03 февраля 2010

Теоретически вы можете загрузить CultureInfo, соответствующий языку / стране для Эфиопии.Похоже, что родным языком в Эфиопии является амхарский , который имеет сокращенный код ISO 639 «am», а код страны ISO 3166 для Эфиопии - «ET».Таким образом, представляется, что правильный культурный код для Эфиопии - "am-ET".Таким образом, попробуйте следующее.

CultureInfo ethiopia = new CultureInfo("am-ET");
int year = 2002; // it is currently 2002 in Ethiopia
int months = ethiopia.Calendar.GetMonthsInYear(year);
for (int i = 1; i <= months; i++) {
    Console.WriteLine(ethiopia.Calendar.GetDaysInMonth(year, i));
}

А затем , поскольку 13-й месяц имеет пять или дней

DateTime time = new DateTime(2002, 13, 5, ethiopia.Calendar);

будет законным.

Если по какой-то причине это не работает, вы также можете посмотреть, как создать собственный календарь, используя этот CodeProject во Вьетнамском лунном календаре в качестве примера.

0 голосов
/ 04 февраля 2010

Я использовал это как решение.

Вы можете добавить отдельный столбец в таблицу данных, чтобы учесть дополнительные эпагоменальные дни ... затем отсортировать данные по обоим столбцам. например: здесь будет пример таблицы, отсортированной по убыванию сначала по Column1, а затем по Column2:

RegDate ---------------- EpaDate

12/30/09 --------------- 1/5/2010 12/30/09 ---------------- 1/4/2010 12/30/09 ---------------- 1/3/2010 12/30/09 ---------------- 1/2/2010 12/30/09 ---------------- 1/1/2010 12/30/09 ------------------ NULL 12/29/09 ------------------ NULL 12/28/09 ------------------ NULL

...