Behnam Mohammadi Ответов: 2

Преобразование даты в формат хиджры.


привет
извините за мой бедный английский
я хочу конвертировать сейчас дату в формат хиджры и получить ее в строковом формате, как это сделать?
пожалуйста, напишите код для меня.
Спасибо.

2 Ответов

Рейтинг:
13

Sergey Alexandrovich Kryukov

Что-то подсказывает мне, что календарь Хиджры, или "исламский календарь", возможно, не поддерживается .NET в его стандартном виде, через ToString(IFormatProvider) или System.DateTime.ToString(String, IFormatProvider), если вы использовали реализацию интерфейса System.IFormatProvider как это реализовано по типу System.Globalization.CultureInfo как это обычно и делается.

Пожалуйста смотрите:
http://msdn.microsoft.com/en-us/library/ht77y576.aspx[^],
http://msdn.microsoft.com/en-us/library/8tfzyc64.aspx[^],
http://msdn.microsoft.com/en-us/library/system.iformatprovider.aspx[^].

Я думаю, что, по крайней мере, одна из фоновых причин такого положения дел заключается в том, что поставщики форматов, основанные на конкретных культурах, основаны на культурных предпочтениях, связанных с определенными нациями или группой наций, разделяющих некоторые культурные элементы, такие как язык, но исламские культурные традиции в значительной степени интернациональны и лишь частично интегрируются в национальные культуры. Вы можете рискнуть попробовать определенные культуры некоторых из них Исламские государства но я не думаю , что хиджра доминирует даже там в той степени, в какой она может быть включена в стандарт. Но ты можешь просто попробовать:
http://en.wikipedia.org/wiki/Hijri[^],
http://en.wikipedia.org/wiki/List_of_Muslim-majority_countries[^].

Пример кода для такого подхода показан в статье MSDN, на которую я ссылался выше, самая первая ссылка; вы можете быстро попробовать все страновые исламские культуры, но я не думаю, что вы найдете форматирование случая как Хиджра. Так что, даже если я буду в меру своих знаний, вы не добьетесь успеха в использовании just .NET Base Class Library (BCL), поэтому вам нужно будет применить полностью пользовательский подход.

Прежде всего, вы можете разработать специфичный для Хиджры System.IFormatProvider самостоятельно. В более для этого случая подходите, вы можете просто разработать свой собственный вариант System.DateTime.ToString что может быть так же просто, как иметь что-то вроде string TimeToHijriString(System.DateTime time /* , some options? */) Все, что вам понадобится, - это описание календаря, на который я ссылался выше, плюс использование отдельных полей System.DateTime.ToString на год, месяц и т. д.:
http://msdn.microsoft.com/en-us/library/system.datetime.aspx[^].

Поскольку Хиджра также имеет 12 месяцев в году, 7 дней в неделю, я надеюсь, что вы можете сопоставить его с Григорианским календарем (известным всем компьютерным системам, http://en.wikipedia.org/wiki/Gregorian_calendar[^]) довольно хорошо, без больших проблем.

Желаю вам всего наилучшего,

—СА


fjdiewornncalwe

+5.

Sergey Alexandrovich Kryukov

Спасибо, Маркус.
--СА

Behnam Mohammadi

Спасибо.

Sergey Alexandrovich Kryukov

Добро пожаловать.
Примите ли вы формальный ответ (зеленая кнопка) - спасибо.
--СА

Рейтинг:
12

Ahmed Mandur

Привет,

Используйте этот метод для преобразования из хиджры в Григорианский

public static string ConvertDateCalendar(DateTime DateConv, string Calendar, string DateLangCulture)
      {
          DateTimeFormatInfo DTFormat;
          DateLangCulture = DateLangCulture.ToLower();
          /// We can't have the hijri date writen in English. We will get a runtime error

          if (Calendar == "Hijri" && DateLangCulture.StartsWith("en-"))
          {
              DateLangCulture = "ar-sa";
          }

          /// Set the date time format to the given culture
          DTFormat = new System.Globalization.CultureInfo(DateLangCulture, false).DateTimeFormat;

          /// Set the calendar property of the date time format to the given calendar
          switch (Calendar)
          {
              case "Hijri":
                  DTFormat.Calendar = new System.Globalization.HijriCalendar();
                  break;

              case "Gregorian":
                  DTFormat.Calendar = new System.Globalization.GregorianCalendar();
                  break;

              default:
                  return "";
          }

          /// We format the date structure to whatever we want
          DTFormat.ShortDatePattern = "dd/MM/yyyy";
          return (DateConv.Date.ToString("f", DTFormat));
      }


Как пользоваться

string date = ConvertDateCalendar(DateTime.Now, "Hijri", "en-US")


Надеюсь, это может вам помочь


Sergey Alexandrovich Kryukov

С точки зрения технического обслуживания и элементарной культуры программирования, использование строкового параметра и переключателя ("Хиджра", "григориан") - это не просто плохой код: это настоящее преступление (я думаю, против самого себя, но вы хотите OP то же самое?) и признак того, что вы понятия не имеете, как делать Программирование, независимо от того, сколько приложений вы создали. После этого фрагмента кода нет необходимости читать остальную его часть.

Если бы вы не предлагали это как "решение" и не пытались учить других, это было бы объяснимо, но для "решения"...

Пожалуйста, поймите это: я не могу голосовать выше 1, извините за это.
--СА

Behnam Mohammadi

Спасибо.

Jabir Puthusseri

он преобразует системную дату в дату хиджры ,но я хочу преобразовать дату хиджры в Григорианскую
пожалуйста, найдите решение для этого

STEEF-R

спасибо тебе
положим у меня есть вопрос
я пробую строку date = ConvertDateCalendar(DateTime.Теперь, "Григорианский", "en-US")
дата по хиджре еще не конвертировать Григорианскому

пожалуйста, помогите мне.