如何将unix
时间转换为Hindu calendarWikipedia时间,反之亦然php
,Perl
或Python
或Java
?我知道我可以转换为Hebrew
和Jewish
。但Hindu
不是一种选择。
更具体地说,我在谈论印度教的农历。以下网站正在运作,正是我想要的:http://web.meson.org/calendars/。例如,它将'28-1-2012
(格里高利)翻译为5-11-2068
(后来。伦。)。我怎样才能完成同样的任务?如果那里绝对没有抄写,我怎么能自己写呢?
答案 0 :(得分:17)
您是否检查了DateTime-Indic-0.1系列模块?至少3个}} 似乎有一种方法可以将传统日期转换为UTC值(utc_rd_values)。
<强>更新强>
我认为DateTime::Indic::Chandramana对许多用户也是有用的(正如我所知,它是印度国家日历),特别是to_gregorian()
和from_gregorian()
方法。
答案 1 :(得分:11)
对于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)
答案 2 :(得分:8)
论文:Indian Calendrical Calculations
在附录中提供Common Lisp代码。
虽然可以根据论文编写Python(或其他语言)解决方案,但作者很好地列举了印度日历规则,因此如果您愿意考虑使用提供的Common Lisp代码,那么这是一篇非常可靠的论文。
答案 3 :(得分:5)
似乎是一项艰巨的任务。根据{{3}},没有明确的方法可以实现100%正确的转换。但是,当他们认为印度教日历只有364天而不是365天(或闰年366天)时,他们似乎错了。
在这里,您可以找到一个好的转换表,包括闰年的处理:this discussion at bytes.com
如果它像写在那里一样容易,你可以试试这样的东西(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://hinduism.about.com/od/basics/a/monthsdayseras.htm的计算器,它应该是05-11-2068而不是07-11-2068。因此,仍然缺少一些转换规则。也许你可以给我一些更多的信息,以便我可以纠正上面的代码。
答案 4 :(得分:1)
我不知道这是否是正确的方法但是 请转到http://calendarhome.com/converter/站点并下载两个javascript文件astro.js和calendar.js,然后按照Gregorian Date的onchange事件并获取Indian Civil Date参数。