গ্রেগরিয়ান তারিখগুলিতে হিজরি তারিখের জন্য কোনও সঠিক রূপান্তরকারী রয়েছে কি?


10

ডেট কনভার্ট সহ অনেক প্রকল্পে আমার কাজ আছে। উদাহরণস্বরূপ, আমি সৌর ক্যালেন্ডারে এবং কীভাবে এগুলিকে গ্রেগরিয়ান তারিখগুলিতে রূপান্তর করতে এবং তার বিপরীতে কাজ করি। সৌর ক্যালেন্ডার (পার্সিয়ান ক্যালেন্ডার) এক বছরের [লিপ বা না] দিনের সংখ্যার দিক দিয়ে গ্রেগরিয়ান তারিখের সাথে প্রায় একই।
তবে আমি সম্প্রতি চন্দ্র ক্যালেন্ডার সহ একটি প্রকল্পে কাজ করেছি। আমি যখন চান্দ্র ক্যালেন্ডার নিয়ে গবেষণা করেছি তখন বুঝতে পেরেছিলাম যে চান্দ্র ব্যবস্থাটিকে সৌরতে রূপান্তর করার জন্য কোনও একক যৌক্তিক পদ্ধতি নেই (কমপক্ষে আমি যতদূর জানি)।
আমি তাদের উপর গবেষণা করেছি এমন কয়েকটি রেফারেন্স লিঙ্ক এখানে দেওয়া হয়েছে:

  1. হিজরি তারিখ থেকে গ্রেগরিয়ান তারিখে (সি #) রূপান্তর করা যায় না
  2. হিজরি ক্যালেন্ডার থেকে গ্রেগরিয়ান ক্যালেন্ডারে রূপান্তর তারিখ এবং তদ্বিপরীত
  3. হিজরি তারিখ গ্রেগরিয়ান থেকে ডেটটাইম.পার্স ব্যবহার করে
  4. হিজরি তারিখকে গ্রেগরিয়ান ডাটে রূপান্তর করুন

আমি উপরের লিঙ্কগুলি, প্রশিক্ষণ এবং পরীক্ষাগুলি অনুসরণ করে লোকদের দ্বারা অ্যালগোরিদম উপস্থাপন করার সময় আমি লক্ষ্য করেছি যে এগুলির কোনওটি একেবারেই সঠিক নয়।

এটি বলার জন্য যথেষ্ট, কেবল "1441/02/30" [Safar 30th]গ্রেগরিয়ান তারিখে রূপান্তর করুন যা আপনি চেষ্টা করতে চান এমন প্রতিটি পদ্ধতি।

নিম্নলিখিত চিত্রটি পূর্বোক্ত উদাহরণের জন্য সহায়ক। এখানে চিত্র বর্ণনা লিখুন

আমি এখানে আমার কিছু পরীক্ষার কোড রেখেছি এবং ব্যর্থ হয়েছি:

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();

উপরের কোডের জন্য ত্রুটি:

স্ট্রিং দ্বারা প্রতিনিধিত্ব করা ডেটটাইম ক্যালেন্ডার সিস্টেমে সমর্থিত নয় lo গ্লোবালাইজেশন Hহিজরিক্যালেন্ডার।

HijriCalendar hc = new HijriCalendar();
DateTime date = new DateTime(1441, 2, 30, hc);
return date.ToString();

উপরের কোডের জন্য ত্রুটি:

"2 মাসের জন্য দিন অবশ্যই 1 এবং 29 এর মধ্যে হওয়া উচিত" "

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();

উপরের কোডের জন্য ত্রুটি:

"2 মাসের জন্য দিন অবশ্যই 1 এবং 29 এর মধ্যে হওয়া উচিত" "

এর পরে, আমি বুঝতে চেষ্টা করছিলাম যে হিজরি তারিখ গ্রেগরিয়ান তারিখে রূপান্তর করার কোনও অ্যালগরিদম আছে কি?
তাই আমি কিছু ইসলামিক অনলাইন তারিখ রূপান্তর পরীক্ষা করেছি এবং আমি অবাক! উভয় তারিখ রূপান্তরকারীগুলিতে
প্রবেশের চেষ্টা করুন "1441/2/30"
প্রথম একজন ফিরে আসছেন October 30, 2019
এবং দ্বিতীয়জন 29 October 2019
হিজরি গ্রেগরিয়ান-রূপান্তরকারী
ইসলামিক তারিখ রূপান্তরকারী - গ্রেগরিয়ান ক্যালেন্ডার রূপান্তরকারী

সুতরাং আমি জানি না যে হিজরি তারিখগুলি গ্রেগরিয়ানে রূপান্তর করার জন্য কোনও বাস্তব অ্যালগরিদম নেই।
আপনার সময় জন্য আগাম ধন্যবাদ।

আরও তথ্যের জন্য, https://www.wikiwand.com/simple/Islamic_cocolate


আপডেট : আমি জানি যে জানার জন্য কোনও সঠিক লাইব্রেরি নেই। তবে কারও কাছে যদি হিজরি ক্যালেন্ডার (এর সমস্ত ইন্টারফেস) সম্পর্কে জ্ঞান বা বিশদ থাকে তবে দয়া করে কেবল এখানে বর্ণনা করুন আমি সত্যিই সবার জন্য একটি হিজরি ক্যালেন্ডার স্থাপন করতে চাই।


আপনার উদাহরণটি কি 17-অক্টোবর -2018 হিসাবে আউটপুট দেয়?
snr - মনিকা পুনরায় ইনস্টল করুন

আপনি যখন সার্চট্রুথ . com / হিজরিতে আপনার উদাহরণটি চেষ্টা করেন , ফলাফলটি ভুল তারিখের ??
snr - মনিকা

আমি সঠিক পোস্টটি কী তা জানি না, কারণ আমি আমার পোস্টে উল্লেখ করেছি যে দুটি ইসলামিক তারিখ রূপান্তরকারী, আউটপুটটি হওয়া উচিত October 30, 2019 wedবা October 29, 2019 tue। আমি এখন চেষ্টা করেছি।
রেজা পাইদার

আপনার ইনপুট তারিখটি ভুল বলে মনে হচ্ছে। যদি আপনি 30 তম নিরাপদে 1442 এর পরিবর্তে 1441 এ পান। আপনার তারিখের সঠিকতা পরীক্ষা করুন।
snr - মনিকা পুনরায় ইনস্টল করুন

1
@ গুস: ফারসি ক্যালেন্ডারটি সৌরজগতে ব্যবহার করছে এবং Omar khayyamপারস্য গণিতবিদ আবিষ্কার করেছেন । পার্সিয়ান ক্যালেন্ডারে 365 দিন (একটি লিপ বছরে 366) থাকে তবে চন্দ্র ক্যালেন্ডার পারস্য ক্যালেন্ডারের তুলনায় 11-12 দিন কম is
রেজা পাইদার

উত্তর:


1

আপনি হিজরি ক্যালেন্ডার স্ট্রিংকে গ্রেগরিয়ান ডেটটাইমে রূপান্তর করতে এবং পার্স করতে এই কোডের মতো কিছু ব্যবহার করতে পারেন।

//assuming current culture is like en-us or something with gregorian calendar
string hijri = "1441/2/30";
HijriCalendar hc = new HijriCalendar();
var dateParts = hijri.Split('/');
DateTime? gregorianDate=null;
if (dateParts.Length == 3 && int.TryParse(dateParts[0], out int year) &&
     int.TryParse(dateParts[1], out int month) && int.TryParse(dateParts[2], out int day))
{
      if(month == 2 && day==30)
      {
         var temp = hc.ToDateTime(year, month, 29, 0, 0, 0, 0);
         gregorianDate = temp.AddDays(1);
      }
      else
      {
         gregorianDate = hc.ToDateTime(year, month, day, 0, 0, 0, 0);
      }

}

আপনার সময় দেওয়ার এবং সমাধানের জন্য ধন্যবাদ তবে আমি ইতিমধ্যে আপনার সমাধানটি পরীক্ষা করেছি এবং এটি একটি ত্রুটি ছুঁড়েছে Day must be between 1 and 29 for month 2. Parameter name: day। আমার পোস্ট মন্তব্যে আমরা যেমন আগে যুক্তি দিয়েছিলাম, অন্য একটি হিজরি (চন্দ্র) মাসের সাফার পরিবর্তনশীল দিন গণনা রয়েছে। আপনার সমাধানে অন্যান্য সমস্যার মতো একই ত্রুটি রয়েছে।
রেজা পেদার

হিজরিক্যালেন্ডার ক্লাসে একটি ত্রুটি থাকতে পারে .Net তাই আমি কোডটি সম্পাদনা করেছি এবং এটি ব্যতিক্রমের জন্য কার্যকর হতে পারে।
আলী হামিদী

ধন্যবাদ। আমি বলতে পারি না যে এই ক্ষেত্রে। নেট উদারপন্থী সহ বাগ আছে। আমি লক্ষ করেছি যে একাধিক ইন্টারফেস হিজরি ক্যালেন্ডারের সাথে কোনও যৌক্তিক বিবরণ ছাড়াই এপোকাস রয়েছে। আপনার সমাধানটি ত্রুটিটি এড়ানোর জন্য একটি প্রতারণা যা একটি সঠিক এবং সঠিক উত্তর নয়। তবে আমি আপনাকে সময় দেওয়ার জন্য ভোট দেব
রেজা পেদার

আমি হিজরিক্যালেন্ডার ক্লাসের উত্স কোডটি দেখেছি । এটি তারিখগুলি রূপান্তর করার আগে DaysInMonth পরীক্ষা করছে। এটি সাফার (২ মাস) জন্য 29 দিন ধরে নিয়েছে । সুতরাং এই মাসে এটির জন্য একটি ছোট বাগ রয়েছে
আলী হামিদী

1
আপনি যদি আমার পোস্টে মন্তব্যগুলি দেখে থাকেন তবে মাইক্রোসফ্ট হিজরি ক্যালেন্ডারের জন্য ডকুমেন্টেশন প্রবর্তন করেছে এবং আপনি সেখানে সাফার এবং অন্যান্য মাসে স্থিরভাবে 29 দিন সময় খুঁজে পেতে পারেন। সুতরাং কোনওভাবে আপনি ঠিক বলেছেন এই লাইব্রেরির জন্য একটি বাগ।
রেজা পাইদার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.