Tenho trabalho em muitos projetos com conversões de datas. por exemplo, trabalho no calendário solar e como convertê-los em datas gregorianas e vice-versa. O calendário solar (calendário persa) é quase semelhante à data gregoriana em termos do número de dias em um ano [pulando ou não].
Mas recentemente trabalhei em um projeto com o calendário lunar. Ao pesquisar no calendário lunar, percebi que não existe um método lógico para converter o sistema lunar em solar (pelo menos até onde eu sei).
Aqui estão alguns links de referência que eu pesquisei sobre eles:
- Não é possível converter de Data do Hijri para Data Gregoriana (c #)
- Converter data do calendário islâmico para calendário gregoriano e vice-versa
- Data islâmica Para gregoriano usando DateTime.Parse
- Converter data do Hijri para dat gregoriano
Ao seguir os links acima, o treinamento e o teste das pessoas apresentaram algoritmos, notei que nenhum deles está absolutamente correto.
Basta dizer, basta converter "1441/02/30" [Safar 30th]
para a data gregoriana, com todos os métodos que você deseja tentar.
A imagem a seguir é útil para o exemplo mencionado acima.
Coloquei aqui alguns códigos de teste e falhei:
CultureInfo arSA = new CultureInfo("ar-SA");
arSA.DateTimeFormat.Calendar = new HijriCalendar();
var dateValue = DateTime.ParseExact("1441/02/30", "yyyy/MM/dd", arSA);
return dateValue.ToString();
O erro para o código acima:
O DateTime representado pela seqüência de caracteres não é suportado no calendário System.Globalization.HijriCalendar.
HijriCalendar hc = new HijriCalendar();
DateTime date = new DateTime(1441, 2, 30, hc);
return date.ToString();
O erro para o código acima:
"O dia deve estar entre 1 e 29 para o mês 2."
string hijri = "1441/2/30";
HijriCalendar hc = new HijriCalendar();
int year = int.Parse(hijri.Substring(0, 4));
string rem = hijri.Remove(0, 5);
int end = rem.IndexOf('/', 0);
int month = int.Parse(rem.Substring(0, end));
rem = rem.Remove(0, end + 1);
int day = int.Parse(rem);
DateTime date = new DateTime(year, month, day, hc);
return date.ToShortDateString();
O erro para o código acima:
"O dia deve estar entre 1 e 29 para o mês 2."
Depois disso, eu estava tentando entender que existe algum algoritmo para implantar a data da conversão Hijri em data gregoriana?
Então, testei um conversor islâmico de datas online e fiquei surpreso!
Apenas tente inserir os "1441/2/30"
dois conversores de data.
o primeiro retornando October 30, 2019
E o segundo retornando 29 October 2019
Hijri gregorian-converter
Islamic Date Converter - Gregorian Calendar Converter
Portanto, não sei se existe algum algoritmo real para converter datas islâmicas em gregoriano.
Agradeço antecipadamente pelo seu tempo.
Para mais informações, https://www.wikiwand.com/simple/Islamic_calendar
Atualização : eu sei que não existe uma biblioteca correta para saber. mas se alguém tiver conhecimento ou detalhes sobre o calendário islâmico (toda a sua interface), descreva aqui que eu realmente quero implantar um calendário islâmico para todos.
October 30, 2019 wed
ouOctober 29, 2019 tue
. Eu tentei agora.Omar khayyam
matemático persa. O calendário persa tem 365 dias (366 em um ano bissexto), mas o calendário lunar é 11-12 dias menor que o calendário persa.Respostas:
Você pode usar algo parecido com este código para converter e analisar seqüências de caracteres do calendário islâmico em DateTime gregoriano.
fonte
Day must be between 1 and 29 for month 2. Parameter name: day
. Como discutimos anteriormente em meus comentários, o Safar de outro mês islâmico (lunar) tem uma contagem variável de dias. sua solução tem o mesmo erro semelhante a outras soluções.