2011-12-27 7 views
43

¿Cómo puedo convertir unix tiempo para Hindu calendar­Wikipedia tiempo y al revés en php, Perl o Python o Java? Sé que puedo convertir a Hebrew y Jewish. Pero Hindu no es una opción.en la conversión hacia y desde el calendario hindú

Para ser más específicos, estoy hablando del calendario lunar hindú. El siguiente sitio web funciona y hace exactamente lo que quiero: http://web.meson.org/calendars/. Por ejemplo, 'traduce' 28-1-2012 (gregoriano) a 5-11-2068 (Hind. Lun.). ¿Cómo puedo lograr la misma tarea? Y si no hay absolutamente ningún scrip, ¿cómo puedo escribirlo?

+0

Proporcione valores de ejemplo de cómo expresaría una fecha (marca de tiempo) cuando la escriba * Calendario hindú * -style. – hakre

+0

De día, mes, año a día, mes, año es suficiente para nuestra aplicación. –

+1

Eso no es lo que quería saber. Simplemente dé ejemplos múltiples, fecha hindú a la izquierda, la fecha gregoriana correspondiente a la derecha. Solo quiero saber de qué se trata ese calendario hindú cuando los valores de la fecha se expresan en un sitio web. – hakre

Respuesta

8

Papel: Indian Calendrical Calculations
proporciona código Common Lisp en el apéndice.

Si bien una solución de Python (u otro idioma) podría escribirse según el documento, los autores enumeran las reglas del calendario indio bastante bien, por lo que es un documento bastante sólido si estás dispuesto a considerar tomar el código Common Lisp provisto .

+0

¡Genial! Creo que con la ayuda de este documento debería ser posible implementar la conversión del calendario. – Alp

+0

Solo para señalar que casi todas las implementaciones, incluida la de Python que publiqué y la que mencionaste inicialmente en el código de uso de tu consulta, se derivaron de los fragmentos de Lisp de ese documento. –

17

¿Has verificado DateTime-Indic-0.1 familia de módulos? Al menos DateTime::Indic::Chandramana parece tener un método para convertir la fecha tradicional en valores UTC (utc_rd_values).

ACTUALIZACIÓN:

supongo Calendar::Saka puede ser útil también para muchos usuarios (como yo he conocido, es el calendario nacional de la India), en particular, to_gregorian() y from_gregorian() métodos.

+0

Gracias, ¿cómo puedo instalar esto? Instalé CPAN y ahora intenté hacer 'perl Makefile.PL', pero me da errores como' Advertencia: prerrequisito DateTime :: Event :: Lunar 0.06 no encontrado'. –

+0

Y qué hace 'cpan install DateTime :: Event :: Lunar 'te digo, lo siento? – raina77ow

+0

Que faltan algunas otras dependencias. Estoy tratando de instalarlos ahora. –

5

Parece ser una tarea difícil. De acuerdo con this discussion at bytes.com, no hay una forma clara de lograr una conversión correcta del 100%. Pero parece que están equivocados cuando suponen que el calendario hindú tiene solo 364 días en lugar de 365 (o 366 en años bisiestos).

Aquí se puede encontrar una buena tabla de conversión que incluye el manejo de los años bisiestos: http://hinduism.about.com/od/basics/a/monthsdayseras.htm

Si es tan fácil como está escrito allí se puede intentar algo como esto (código 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); 
?> 

salida de este código:

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

Sin embargo, según la calculadora de this Java applet, debe ser en lugar de 05.11.2068 07.11.2068. Por lo tanto, todavía faltan algunas reglas de conversión. Quizás puedas darme más información para que pueda corregir el código anterior.

11

Para Python, use calendar2 (nota: este no es el módulo de calendario incorporado).

uso de la muestra:

>>> 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) 
1

I no sabe si se trata de enfoque correcto o no, pero por favor vaya a http://calendarhome.com/converter/ sitio y descargar dos archivos astro.js y calendar.js javascript y siga eventos onChange de gregoriano Fecha a buscar parámetros Civil Fecha India.

Cuestiones relacionadas