转换为和来自印度教日历

如何将unix时间转换为印度日历维基百科时间,以及在phpPerlPythonJava的其他方式? 我知道我可以皈依HebrewJewish 。 但Hindu不是一个select。

更具体地说,我正在谈论印度教的阴历。 以下网站正在工作,而且正是我想要的: http : //web.meson.org/calendars/ 。 例如,它把5-11-2068 (公历)翻译成5-11-2068 (后文)。 我怎样才能完成同样的任务? 如果那里绝对没有问题,我怎么能自己写呢?

纸: 印度的日历计算
提供附录中的Common Lisp代码。

虽然可以根据论文编写Python(或其他语言)解决scheme,但作者列举了印度日历规则,所以如果您愿意考虑使用提供的Common Lisp代码,那么这是一篇非常可靠的论文。

你检查了DateTime-Indic-0.1系列模块吗? 至lessDateTime :: Indic :: Chandramana似乎有一个将传统date转换为UTC值(utc_rd_values)的方法。

更新:

我认为Calendar :: Saka对于许多用户(如我所知,这是印度的国家日历)也是有用的,特别是to_gregorian()from_gregorian()方法。

对于Python,使用calendar2 (注意:这不是内置的日历模块)。

样品使用:

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

似乎是一项艰巨的任务。 根据bytes.com上的讨论,没有明确的方法来完成100%正确的转换。 但是,他们认为印​​度教历法只有364天而不是365天(闰年366天),这似乎是错误的。

在这里你可以find一个很好的转换表,包括处理闰年: 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("dmY", mktime(11, 59, 0, $newMonth, $newDay, $newYear)); } function dateIsLeapYear($date) { return date('L', strtotime($date)); } $date = date("dmY", 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 

但根据这个Java小程序的计算器,应该是05-11-2068,而不是07-11-2068。 所以,还是有一些转换规则丢失。 也许你可以给我更多的信息,以便我可以更正上面的代码。