2011-12-27 14 views
43

मैं कैसे unix समय Hindu calendar­Wikipedia समय और php, Perl या Python या Java में इसका विपरीत में बदल सकते हैं? मुझे पता है कि मैं Hebrew और Jewish में परिवर्तित कर सकता हूं। लेकिन Hindu एक विकल्प नहीं है।करने और हिंदू कैलेंडर से परिवर्तित

अधिक विशिष्ट होने के लिए, मैं हिंदू चंद्र कैलेंडर के बारे में बात कर रहा हूं। निम्नलिखित वेबसाइट काम कर रही है और वही करता है जो मैं चाहता हूं: http://web.meson.org/calendars/। उदाहरण के लिए, यह 28-1-2012 (ग्रेगोरियन) से 5-11-2068 (हिंद लुन।) का अनुवाद करता है। मैं एक ही काम कैसे पूरा कर सकता हूं? और अगर वहाँ बिल्कुल कोई स्क्रिप नहीं है, तो मैं इसे खुद कैसे लिख सकता हूं?

+0

कृपया देना उदाहरण महत्व देता है कि कैसे आप एक तारीख (टाइमस्टैम्प) को व्यक्त जब आप इसे लिखते * हिन्दू पंचांग * शैली होगा। – hakre

+0

दिन, महीने, साल-प्रतिदिन, महीने, साल से हमारे आवेदन के लिए पर्याप्त है। –

+1

यही वह नहीं है जिसे मैं जानना चाहता था। बस बाईं ओर हिंदू तिथि, दाईं ओर ग्रेगोरियन दिनांक के अनुसार, कई उदाहरण दें। मैं सिर्फ यह जानना चाहता हूं कि हिंदू कैलेंडर क्या है जब वेबसाइट पर तारीख मान व्यक्त किए जाते हैं। – hakre

उत्तर

8

पेपर: Indian Calendrical Calculations
परिशिष्ट में कॉमन लिस्प कोड प्रदान करता है।

जबकि पाइथन के अनुसार एक पायथन (या अन्य भाषा) समाधान लिखा जा सकता है, लेखकों ने भारतीय कैलेंडर नियमों को अच्छी तरह से समझाया है, इसलिए यह एक सुंदर ठोस पेपर है यदि आप प्रदान किए गए सामान्य लिस्प कोड को लेने पर विचार करना चाहते हैं ।

+0

ग्रेट! मुझे लगता है कि इस पेपर की मदद से कैलेंडर रूपांतरण को लागू करना संभव होना चाहिए। – Alp

+0

बस ध्यान दें कि लगभग सभी कार्यान्वयन - जिसमें मैंने पोस्ट किया है पाइथन में एक और जिसे आपने प्रारंभ में अपने प्रश्न में उल्लेख किया है, उस पेपर से लिस्प स्निपेट से प्राप्त कोड का उपयोग किया गया है। –

17

क्या आपने मॉड्यूल के DateTime-Indic-0.1 परिवार की जांच की? कम से कम DateTime::Indic::Chandramana पारंपरिक तिथि को यूटीसी मानों (utc_rd_values) में परिवर्तित करने का एक तरीका प्रतीत होता है।

अद्यतन:

मुझे लगता है Calendar::Saka कई उपयोगकर्ताओं के लिए रूप में अच्छी तरह उपयोगी हो सकता है (के रूप में मैं जानता हूं, यह भारतीय राष्ट्रीय कैलेंडर है), विशेष रूप से, to_gregorian() और from_gregorian() तरीकों।

+0

धन्यवाद, मैं इसे कैसे स्थापित कर सकता हूं? मैं CPAN स्थापित किया है और अब 'करने के लिए पर्ल Makefile.PL' की कोशिश की है, लेकिन यह' की तरह चेतावनी त्रुटियों देता है: शर्त दिनांक समय :: घटना :: चंद्र 0.06 –

+0

found.' नहीं और क्या 'cpan स्थापित करता है दिनांक समय :: घटना :: चंद्र 'आपको बताओ, क्षमा करें? – raina77ow

+0

कि कुछ अन्य निर्भरताएं गायब हैं। मैं अब उन्हें स्थापित करने की कोशिश कर रहा हूं। –

5

एक कठिन काम लगता है। this discussion at bytes.com के मुताबिक 100% सही रूपांतरण पूरा करने का कोई स्पष्ट तरीका नहीं है। लेकिन ऐसा लगता है कि वे गलत हैं जब वे मानते हैं कि हिंदू कैलेंडर में 365 (या 366 लीप वर्षों में) के बजाय केवल 364 दिन हैं।

यहाँ

आप लीप वर्ष की हैंडलिंग सहित एक अच्छा रूपांतरण सारणी पा सकते हैं: 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 

लेकिन this Java applet की कैलकुलेटर के अनुसार, यह 2068/05/11 के बजाय 2068/07/11 होना चाहिए। तो, अभी भी कुछ रूपांतरण नियम गुम हैं। शायद आप मुझे कुछ और जानकारी दे सकते हैं ताकि मैं उपरोक्त कोड को सही कर सकूं।

11

पायथन के लिए, 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) 
1

मैं जानता हूँ कि यह सही दृष्टिकोण या नहीं बल्कि कृपया http://calendarhome.com/converter/ साइट पर जाएं और दो जावास्क्रिप्ट फ़ाइलें astro.js और calendar.js डाउनलोड करने और ग्रेगोरियन दिनांक के onchange घटनाओं का पालन करें और भारतीय सिविल दिनांक मापदंडों लाने है कि क्या नहीं है।

संबंधित मुद्दे