45 votes

Conversion vers et depuis le calendrier hindou

Comment puis-je convertir unix du temps de calendrier HindouWikipedia le temps et dans l'autre sens, en php, Perl ou Python ou Java? Je sais que je peux convertir Hebrew et Jewish. Mais Hindu n'est pas une option.

Pour être plus précis, je parle de l'Hindou calendrier lunaire. Le site suivant est le travail et fait exactement ce que je veux: http://web.meson.org/calendars/. Par exemple, il 'se traduit par' 28-1-2012 (Grégorien) à l' 5-11-2068 (Hind. Lun.). Comment puis-je accomplir la même tâche? Et si il n'y a absolument pas de scripts, comment puis-je l'écrire moi-même?

17voto

raina77ow Points 45965

Avez-vous vérifier DateTime-S-0.1 famille de modules? Au moins DateTime::S::Chandramana semble avoir une méthode pour convertir la date traditionnelle en UTC valeurs (utc_rd_values).

Mise à JOUR:

Je suppose que le Calendrier::Saka peut être utile pour de nombreux utilisateurs (que j'ai connu, c'est l'Indien calendrier national), en particulier, to_gregorian() et from_gregorian() méthodes.

11voto

Burhan Khalid Points 50578

Pour Python, utilisez calendar2 (note: ce n'est pas le module de calendrier intégré).

Exemple d'utilisation:

 >>> from calendar2 import *
>>> old_hindu_solar_from_absolute(absolute_from_gregorian(3,1,2012))
(11, 16, 5112)
>>> old_hindu_lunar_from_absolute(absolute_from_gregorian(3,1,2012))
(12, 0, 8, 5112)
 

8voto

Prashant Kumar Points 5220

Papier: Calculs calendaires indiens
Fournit le code Common Lisp en annexe.

Tandis qu’une solution en Python (ou dans une autre langue) pourrait être écrite conformément au document, les auteurs énumèrent assez bien les règles du calendrier indien. Il s’agit donc d’un document très solide si vous êtes prêt à envisager de prendre le code fourni par Common Lisp.

5voto

Alp Points 10727

Semble être une tâche difficile. Selon cette discussion à bytes.com il n'y a pas de moyen pour accomplir une raison à 100% de conversion. Mais il semble qu'ils se trompent quand ils pensent que le calendrier Hindou a seulement 364 jours au lieu de 365 (ou 366 dans les années bissextiles).

Ici vous pouvez trouver une bonne table de conversion, y compris le traitement des années bissextiles: http://hinduism.about.com/od/basics/a/monthsdayseras.htm

Si c'est aussi facile que d'écrit là, vous pouvez essayer quelque chose comme cela (code 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);
?>

La sortie de ce code:

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

Mais, selon le calculateur de cet applet Java, il devrait être 05-11-2068 au lieu de 07-11-2068. Donc, il y a encore quelques règles de conversion manquant. Peut-être que vous pouvez me donner plus d'informations pour que je puisse corriger le code ci-dessus.

1voto

Avinash Points 374

Je ne sais pas s'il s'agit d'une approche correcte ou non, mais rendez-vous sur le site http://calendarhome.com/converter/ et téléchargez deux fichiers javascript astro.js et calendar.js et suivez les événements sur Exchange de Date grégorienne et récupérez les paramètres de date civile indienne. .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X