java - تحويل من وإلى التقويم الهندوسي




php python (4)

أنا لا أعرف ما إذا كان النهج الصحيح أم لا ولكن يرجى الانتقال إلى http://calendarhome.com/converter/ الموقع وتنزيل ملفين جافا سكريبت astro.js و calendar.js واتباع أحداث onchange للتاريخ الغريغوري وجلب معلمات التاريخ المدني الهندي .

كيف يمكنني تحويل وقت unix إلى التقويم الهندوسي وقت Wikipedia والطريق الآخر مستديرًا في php أو Perl أو Python أو Java ؟ أعرف أنني أستطيع أن أتحول إلى Hebrew Jewish . لكن Hindu ليس خيارًا.

لكي أكون أكثر تحديدًا ، أتحدث عن التقويم القمري الهندوسي. الموقع التالي يعمل ويفعل ما أريده بالضبط: http://web.meson.org/calendars/ . على سبيل المثال ، "يترجم" 28-1-2012 (غريغوري) إلى 5-11-2068 (هند. لون). كيف يمكنني إنجاز نفس المهمة؟ وإذا لم يكن هناك أي شيء على الإطلاق ، فكيف يمكنني كتابته بنفسي؟


الورق: الحسابات الحسابية الهندية
يوفر كود Lisp المشترك في الملحق.

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


هل قمت بالتحقق DateTime-Indic-0.1 عائلة DateTime-Indic-0.1 من الوحدات النمطية؟ على الأقل DateTime :: Indic :: يبدو أن Chandramana طريقة لتحويل التاريخ التقليدي إلى قيم UTC (utc_rd_values).

تحديث:

أفترض أن Calendar :: Saka قد يكون مفيدًا أيضًا للعديد من المستخدمين (كما عرفت ، إنه التقويم القومي الهندي) ، على وجه الخصوص ، to_gregorian() و from_gregorian() .


يبدو أن مهمة صعبة. وفقًا لهذه المناقشة في bytes.com لا توجد طريقة واضحة لتحقيق تحويل صحيح 100٪. ولكن يبدو أنهم مخطئون عندما يفترضون أن التقويم الهندوسي لديه 364 يومًا فقط بدلاً من 365 (أو 366 سنة كبيسة).

هنا يمكنك العثور على جدول تحويل جيد بما في ذلك التعامل مع سنوات كبيسة: http://hinduism.about.com/od/basics/a/monthsdayseras.htm

إذا كان الأمر سهلاً كما هو مكتوب ، يمكنك تجربة شيء من هذا القبيل (رمز PHP):

<?php

function convertDateToHinduDate($date) {
    $beginningDayOfMonth = array(
        1 => 21,
        2 => 20,
        3 => 22 + (dateIsLeapYear($date) ? -1 : 0), /* 21 in leap years */
        4 => 21,
        5 => 22,
        6 => 22,
        7 => 23,
        8 => 23,
        9 => 23,
        10 => 23,
        11 => 22,
        12 => 22,
    );

    $daysOfHinduMonth = array(
        1 => 30 + (dateIsLeapYear($date) ? 1 : 0), /* 31 in leap years */
        2 => 31,
        3 => 31,
        4 => 31,
        5 => 31,
        6 => 31,
        7 => 30,
        8 => 30,
        9 => 30,
        10 => 30,
        11 => 30,
        12 => 30,
    );

    $day = (int) date('d', strtotime($date));
    $month = (int) date('m', strtotime($date));
    $year = (int) date('Y', strtotime($date));

    $monthBefore = $day < $beginningDayOfMonth[$month];
    $yearBefore = $month < 3 || ($month == 3 && $day < $beginningDayOfMonth[3]);

    $newYear = $year + 57 + ($yearBefore ? -1 : 0);
    $newMonth = $month - 2 + ($monthBefore ? -1 : 0);
    if($newMonth < 1) $newMonth = 12 + $newMonth;
    $newDay = $day - $beginningDayOfMonth[$month];
    if($newDay < 1) $newDay = $daysOfHinduMonth[$newMonth] + $newDay;

    return date("d-m-Y",  mktime(11, 59, 0, $newMonth, $newDay, $newYear));
}

function dateIsLeapYear($date) {
    return date('L', strtotime($date));
}

$date = date("d-m-Y", strtotime('2012-01-28'));

echo 'Date: ', $date, ' (is leap year: ', dateIsLeapYear($date) ? 'yes' : 'no', ')<br />';
echo 'Converted Hindu date: ', convertDateToHinduDate($date);
?>

مخرجات هذا الكود:

Date: 28-01-2012 (is leap year: yes)
Converted Hindu date: 07-11-2068

ولكن وفقًا لآلة الحاسبة في برنامج http://web.meson.org/calendars/ ، يجب أن يكون 05-11-2068 بدلاً من 07-11-2068. لذلك ، لا تزال هناك بعض قواعد التحويل مفقودة. ربما يمكنك أن تعطيني بعض المعلومات حتى أتمكن من تصحيح الكود أعلاه.







calendar