الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

إنتاج صف التقويم القمري أو الهجري

مغلق
بدأه حسام الملحم في 21 يناير 2005 · 13 رد · 1,127 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم،،

أتمنى أي يكون بحوزتي حزمة أو صف تخدم السنة القمرية وبالأخص الهجرية! حسب علمي توجد برامج كثيرة تقوم بالتحويل بين الميلادي والهجري. لكن ما أطمح إليه وجود صف يخدم هذه العملية من دون معرفة المبرمج تفاصيل التحويل. الصف يمثل تاريخا معينا أو يوما معينا في الدهر. والعمليات التي يدار به تندرج من تغيير الأيام أو زيادتها أو إنتاج قيمة للزمن بين تاريخين وغيرها.. لا أدري إن كان أحد يشاركني الأمنية.

لدينا الصف (تقويم) java.util.Calendar والذي يمثل تقويما سنويا غير محدد الهوية والذي منه نستطيع تطوير تقويم قمري ومن بعده إلى تخصيصه بالهجري. يوجد حاليا تقويم شمسي ميلادي والذي يسمى بـ java.util.GregorianCalendar وهو المستخدم في حساب التواريخ عامة.

دخول الأشهر القمرية يتم برؤية الهلال الجديد، لكن في عالم الأرقام يتم الدخول بالحساب الفلكي. (لا أعلم إن كانت هناك عدة طرق لذلك أو طريقة واحدة)

ما رأيكم في تطوير arabTeam.util.HijriCalendar والذي سيخدم التاريخ الهجري حتى يتسنى للجميع استخدامه؟ إن كانت هناك عدة طرق للحساب، فباستخدام طريقة الوراثة نستطيع تطبيق هذه الحسابات بتوفيرها إلى المبرمج في عدة صفوف يستطيع الاختيار بينها.

#2

فكرة جميلة جدا ... وانا مستعد بالمشاركة بما املك من خبرة ولو كانت قليلة .

ولكن البداية هي جمع مصادر عن كيفية التحويل بين هجري وميلادي ..

اسف سوف اقطعك من كتابة الكود، ادخل هنا لدقيقتين فقط

http://www.shbab1.com/2minutes.htm

#3

فكرة جميلة وليست صعبة ووهنا في المنتدى تم وضع معادلة لمعرفة تحويل التاريخ من هجري الى ميلادي والعكس ويعني مسالة التحويلات لا اعتقد بانها مشكلة

لست متواجد بشكل يومي

#4

ماذا عن حساب عدد أيام شهر ما، هل هو 30 يوما أو 29؟ هل هو من السهل الحصول على هذه المعادلات؟

#5

لاأحد يعرف هل سيكون الشهر ناقص ام كامل الا الله عز وجل .

لكن باب الاحتمالات مفتوح .... وهذا ماتقوم به هيئات التقاويم الموجودة في الوطن العربي.

المستخدم يجب ان يغير ذلك يدويا يعني يضع الشهر هذا ناقص اذا كان ناقص.

وشكرا.

اسف سوف اقطعك من كتابة الكود، ادخل هنا لدقيقتين فقط

http://www.shbab1.com/2minutes.htm

#6

السلام عليكم ورحمة الله وبركاته

البرنامج ممتاز وأرجو منك الاستمرار

ووفقك الله

اللهم صل وسلم وزد وبارك على سيدنا محمد وعلى آله وصحبه وسلم

تعلم كيف تقرأ من ملف باستخدام لغة السي

Routers Programming-الدرس الأول

#7

عزيزي .. ابغى اوضح نقطه وحده .. Package = حزمه ..

صف هل تقصد بها Package ؟!؟ أو Class

اعتقد انك تقصد بها Class و لكن أعتقد ان التعريب ليس في محله..

أما بالنسبه للتحويل فتوجد معادلة واضحه من خلالها يتم التحويل بشكل صحيح و فلكي كما هو موجود بتقويم أم القرى

و الطريقه واحده لا تتغير من مكان الى اخر و المستخدم لا يحتاج الى التعديل

و يجب على تسمية الحزمه بهذا الشكل

com.arabteam2000.X.Y.Z الخ..

#8

انت قلتها ياأخ صلاح " على حسب تقويم أم القرى" .

وانا على جهازي لانه على حسب ام القرى اضطررت خلال الثلاث سنوات الماضية الى تغيير التاريخ يدويا .

واهلا بك اخ صلاح من زمااااااان عن مشاركاتك ....

الا قولي كيف الكورس عند كريشنا ؟؟؟ ان شاء الله اخذت فيه قريد كويس ؟؟ :)

اسف سوف اقطعك من كتابة الكود، ادخل هنا لدقيقتين فقط

http://www.shbab1.com/2minutes.htm

#9

Class = فئة ؟؟

قد أبدأ في صنع الفئة، تنقصني المعادلات حاليا، وتنقصني الطريقة في معرفة طول الشهر. مشاركتكم تهمني!!

صالح، ألم تصنع برنامجا للتحويل؟ كأني أذكر أنك صنعت واحدا!!

#10

السلام عليكم ورحمة الله وبركاته

أنا من المؤيدين لفكرة مثل هذه الفكرة ، ولكن يجب في البداية تحديد الخطوات البدائية لمثل هذا المشروع

ثانياً : يجب وضع الأهداف المرجوة من المشروع لكي يتسنى للجميع وضع صورة عامة أو يقوم الأعضاء بوضع تصور للمشروع بشكل كامل مع تحديد النتائج

ثالثاً : يتعاون جميع الأفراد به بما يمتلكون من أفكار أو معادلات قد تفيد هذا المشروع

وأحب أن أكون من المساهمين في مثل هذا المشروع لأننا نهدف دائماً إلى التطور

فأرجو منك أخي الكريم وضع تصور كامل إن أمكن

اللهم صل وسلم وزد وبارك على سيدنا محمد وعلى آله وصحبه وسلم

تعلم كيف تقرأ من ملف باستخدام لغة السي

Routers Programming-الدرس الأول

#11

التصور:

1- فئة أو Class يخدم التقويم الهجري. يستعمله المبرمجون والمطورون في برامجهم كما يريدون.

2- الناتج ليس برنامجا بل هو فقط أداة يستعملها المذكورون في 1.

3-هذا هو شرح التقويم النظري

java.util.Calendar

باستعمال الوراثة نستطيع تحويله إلى تقويم يطبق التقويم الهجري بإملاء 8 طرق أو أوامر كما هو مبين في الوصلة السابقة. وهذا بالضبط ما نريده!

هو بالطبع مطبق كتقويم ميلادي في الوصلة التالية (يستطيع المبرمجون استخدام هذه الفئة لحساب التاريخ الميلادي فقط.)

java.util.GregorianCalendar

#12

المعادله موجوده بالقسم على ما اعتقد..

اخ مبتدئ جدا: اما بالنسبه لتغيير التاريخ .. انا نسيت التاريخ الهجري بسبب الجامعه :D.. و القريد من احسن ما يكون .. هذا كريشنا .. مش لعب عيال :D

و انا اعتقد انكم تحاولون دمج هذا الـ Class بحزمه الجافا لموقع صن :)

#13

حتى تكونوا في الصورة،،،

/**
 * AWT Sample application
 *
 * @author Hussam Al-Mulhim ÍÓÇã ÇáãáÍã
 * @version 1.00 05/02/18
 */
 import java.util.*;

public abstract class LunarCalendar extends Calendar{
    
    LunarCalendar(){
   	 super();
    }
    
    protected void computeFields(){
   	 
    }
    protected void computeTime(){
   	 
    }
    public int getGreatestMinimum(int field){
   	 switch(field){
      case Calendar.DAY_OF_MONTH: return 1;
      case Calendar.DAY_OF_YEAR: return 1;
      case Calendar.DAY_OF_WEEK_IN_MONTH:
        System.out.println("DAY_OF_WEEK_IN_MONTH");
     	 return 0;
      case Calendar.MONTH: return 0;
      case Calendar.YEAR: return 1;
      case Calendar.WEEK_OF_MONTH: return 0;
      case Calendar.WEEK_OF_YEAR: return 0;
      default: System.out.println("OTHER: "+field);
     	 return 24;
      
   	 }
    }
    public int getLeastMaximum(int field){
   	 switch(field){
      case Calendar.DAY_OF_MONTH: return 29;
      case Calendar.DAY_OF_YEAR: return 12*29;
      case Calendar.DAY_OF_WEEK_IN_MONTH:
        System.out.println("DAY_OF_WEEK_IN_MONTH");
     	 return 5;
      case Calendar.MONTH: return 11;
      case Calendar.YEAR: return 1000000;
      case Calendar.WEEK_OF_MONTH: return 5;
      case Calendar.WEEK_OF_YEAR: return 12*29/7;
      default: System.out.println("OTHER: "+field);
     	 return 24;
      
   	 }
    }
    public int getMaximum(int field){
   	 switch(field){
      case Calendar.DAY_OF_MONTH: return 30;
      case Calendar.DAY_OF_YEAR: return 12*30;
      case Calendar.DAY_OF_WEEK_IN_MONTH:
        System.out.println("DAY_OF_WEEK_IN_MONTH");
     	 return 5;
      case Calendar.MONTH: return 11;
      case Calendar.YEAR: return 1000000;
      case Calendar.WEEK_OF_MONTH: return 5;
      case Calendar.WEEK_OF_YEAR: return (12*30)/7+1;
      default: System.out.println("OTHER: "+field);
     	 return 24;
      
   	 }
    }
    public int getMinimum(int field){
   	 switch(field){
      case Calendar.DAY_OF_MONTH: return 1;
      case Calendar.DAY_OF_YEAR: return 1;
      case Calendar.DAY_OF_WEEK_IN_MONTH:
        System.out.println("DAY_OF_WEEK_IN_MONTH");
     	 return 1;
      case Calendar.MONTH: return 0;
      case Calendar.YEAR: return 1;
      case Calendar.WEEK_OF_MONTH: return 0;
      case Calendar.WEEK_OF_YEAR: return 0;
      default: System.out.println("OTHER: "+field);
     	 return 24;
      
   	 }
    }
    
    public void roll(int field, boolean up){
   	 
    }
    
    
    public static void main(String[] args) {
        GregorianCalendar c=(GregorianCalendar)Calendar.getInstance();
  /*      print("Month Maximum: ");
        System.out.println(c.getMaximum(Calendar.MONTH));
        print("Month Minimum: ");
        System.out.println(c.getMinimum(Calendar.MONTH));
        print("Day Maximum: ");
        System.out.println(c.getMaximum(Calendar.DAY_OF_MONTH));
        print("Day Minimum: ");
  System.out.println(c.getMinimum(Calendar.DAY_OF_MONTH));
        print("Year Maximum: ");
  System.out.println(c.getMaximum(Calendar.YEAR));
        print("Year Minimum: ");
  System.out.println(c.getMinimum(Calendar.YEAR));
        print("Day of Year Minimum: ");
  System.out.println(c.getMinimum(Calendar.DAY_OF_YEAR));
        print("Day of Year Maximum: ");
  System.out.println(c.getMaximum(Calendar.DAY_OF_YEAR));
        print("Week of Year Minimum: ");
  System.out.println(c.getMinimum(Calendar.WEEK_OF_YEAR));
        print("Week of Year Maximum: ");
  System.out.println(c.getMaximum(Calendar.WEEK_OF_YEAR));
        print("Week of Month Minimum: ");
  System.out.println(c.getMinimum(Calendar.WEEK_OF_MONTH));
        print("Week of Month Maximum: ");
  System.out.println(c.getMaximum(Calendar.WEEK_OF_MONTH));
        
        println("Least");
        print("Month Maximum: ");
        System.out.println(c.getLeastMaximum(Calendar.MONTH));
        print("Month Minimum: ");
        System.out.println(c.getGreatestMinimum(Calendar.MONTH));
        print("Day Maximum: ");
        System.out.println(c.getLeastMaximum(Calendar.DAY_OF_MONTH));
        print("Day Minimum: ");
  System.out.println(c.getGreatestMinimum(Calendar.DAY_OF_MONTH));
        print("Year Maximum: ");
  System.out.println(c.getLeastMaximum(Calendar.YEAR));
        print("Year Minimum: ");
  System.out.println(c.getGreatestMinimum(Calendar.YEAR));
        print("Day of Year Minimum: ");
  System.out.println(c.getGreatestMinimum(Calendar.DAY_OF_YEAR));
        print("Day of Year Maximum: ");
  System.out.println(c.getLeastMaximum(Calendar.DAY_OF_YEAR));
        print("Week of Year Minimum: ");
  System.out.println(c.getGreatestMinimum(Calendar.WEEK_OF_YEAR));
        print("Week of Year Maximum: ");
  System.out.println(c.getLeastMaximum(Calendar.WEEK_OF_YEAR));
        print("Week of Month Minimum: ");
  System.out.println(c.getGreatestMinimum(Calendar.WEEK_OF_MONTH));
        print("Week of Month Maximum: ");
  System.out.println(c.getLeastMaximum(Calendar.WEEK_OF_MONTH));
    //*/    
        GregorianCalendar gc=new GregorianCalendar(1970, 2, 7,3,0,0);
        GregorianCalendar gc1=new GregorianCalendar(1971, 0, 1,3,0,0);
   //     System.out.println(gc.getTimeInMillis());
   //     System.out.println(gc1.getTimeInMillis());
        long D=(long)1000*60*60*24;
        long M29=D*(long)(29);
        long M30=D*(long)(30);
        long MP=M29+M30;
        long Y=(MP)*(long)(12);
        long LY=Y+D;
        long YP=Y*2+LY;
        long sys=gc.getTimeInMillis();
        long period=sys/YP;
        //System.out.println("Period Between: "+(period+1389)+"\tand "+ (period+1389+3));
        long swap=sys%YP;
        
        long year=swap/Y;
        year=(period*3+year+1389);
      //  System.out.println("Year: "+year);
        swap=swap%Y;
        long month;
        long mPeriod=swap/MP-3;
    //     System.out.println("Month Period Between: "+(mPeriod+13)+"\tand "+ (mPeriod+1+13));
        swap=swap%MP;
        month=swap/M30;
        month=(mPeriod+month+13);
  //        System.out.println("Month: "+month);
      swap=swap%M30;
      
        long day=swap/D+1;
        day=day+22;
//        System.out.println(day);
 //       System.out.println(year+"\t"+month+"\t"+day);
  monitor.MonitorManager.setMonitorAsDefaultSystemIO();
     test();   
        
    }
    public static void test(){
          for(int year=0;year<10;year++)
         	 for(int month=0;month<12;month++)
            for(int day=1;day<32;day++)
        hijri(new GregorianCalendar(1970+year, month, day, 0,0,0));
 	 
    }
    public static void  println(Object x){
   	 System.out.println(x);
    }
    public static void print(Object x){
   	 System.out.print(x);
    }
    public static void hijri(Calendar c){
   //     System.out.println(gc.getTimeInMillis());
   //     System.out.println(gc1.getTimeInMillis());
        long D=(long)1000*60*60*24;
        long M29=D*(long)(29);
        long M30=D*(long)(30);
        long MP=M29+M30;
        long Y=(MP)*(long)(12);
        long LY=Y+D;
        long YP=Y*2+LY;
        long sys=c.getTimeInMillis();
        long period=sys/YP;
        //System.out.println("Period Between: "+(period+1389)+"\tand "+ (period+1389+3));
        long swap=sys%YP;
        
        long year=swap/Y;
        year=(period*3+year+1389);
      //  System.out.println("Year: "+year);
        swap=swap%Y;
        long month;
        long mPeriod=swap/MP;
    //     System.out.println("Month Period Between: "+(mPeriod+13)+"\tand "+ (mPeriod+1+13));
        swap=swap%MP;
        month=swap/M30;
        month=((mPeriod*2+month+9)%12);
  //        System.out.println("Month: "+month);
      swap=swap%M30;
        long day=swap/D+1;
        day=day%22;
//        System.out.println(day);
        System.out.println(year+"\t"+(month+1)+"\t"+day);
   	 
   	 
    }
}

وما زال التطوير مستمرا....

#14

وجدت هذا البريمج على الشبكة، يقوم بالتحويل بين أي تقويم لأي تقويم!!

إسلامية، هندوسية، يهودية، الخ....

http://web.meson.org/calendars/

ووجدت هذه الحزمة التي تحوي فئات للتحويل ولمعالجة جميع التقاويم!!!

http://www.talkaboutprogramming.com/group/...sages/3114.html

تم تعديل هذه المشاركة بواسطة أبومازن في 23 فبراير 2005 في 02:21

هذا الموضوع مغلق.

مواضيع مشابهة