সূর্য সিদ্ধান্ত পঞ্জিকা সকল প্রবন্ধ

ইষ্টকাল, স্থানীয় মধ্যাহ্ন ও লগ্ন: জন্মসময়কে রাশি চক্রে কীভাবে স্থাপন করা হয়?

জন্মের civil time থেকে UTC, Julian Day, sidereal time, নিরয়ণ লগ্ন, ইষ্টকাল ও ভাবচালিত চক্র নির্ণয়ের ব্যাখ্যা এবং C# 5 implementation।

গণনাপদ্ধতি · সময় ও লগ্ন · প্রবন্ধ ৩৬

ইষ্টকাল, স্থানীয় মধ্যাহ্ন ও লগ্ন: জন্মসময়কে রাশি চক্রে কীভাবে স্থাপন করা হয়?

একটি জন্মসময় কেবল ঘড়ির সংখ্যা নয়। সেটি কোন শহরের, কোন time zone-এর, daylight-saving চলছিল কি না, এবং কোন calendar label ব্যবহৃত হয়েছে—সব নির্ধারণের পরেই মুহূর্তটি আকাশের ঘূর্ণনের সঙ্গে যুক্ত হয়। এই প্রবন্ধে civil input থেকে নিরয়ণ লগ্ন ও ভাবচালিত চক্র পর্যন্ত সম্পূর্ণ reproducible pipeline দেখানো হয়েছে।

এক বাক্যে মূলনীতি: ইষ্টকাল হলো নির্বাচিত সূর্যোদয় থেকে জন্মমুহূর্ত পর্যন্ত elapsed time; কিন্তু লগ্নের astronomical calculation করতে exact UT Julian Day, geographic latitude ও longitude প্রয়োজন।

একই জন্মের সঙ্গে তিন ধরনের সময়

জন্মছক তৈরির সময় তিনটি আলাদা ধারণা প্রায়ই এক নামে ব্যবহার করা হয়। এগুলো আলাদা না রাখলে result মিলবে না।

সময়অর্থপ্রধান ব্যবহার
Civil timeঘড়িতে লেখা local date ও time; time-zone/DST-সহUser input ও display
ইষ্টকালসংশ্লিষ্ট সূর্যোদয় থেকে elapsed সময়, সাধারণত দণ্ড-পল-বিপলেপ্রাচীন table-based পদ্ধতি ও printed record
Sidereal timeনক্ষত্রপটের তুলনায় পৃথিবীর ঘূর্ণনের angular measureলগ্ন, MC ও house cusp

এই তিনটির মধ্যে সরাসরি substitution করা যায় না। যেমন সকাল ১০টা civil time-কে শুধু ২৪ মিনিটে ভাগ করলে একটি দণ্ড-পল সংখ্যা পাওয়া যায়, কিন্তু সেটি ইষ্টকাল নয়—কারণ স্থানীয় সূর্যোদয় বাদ দিতে হবে। আবার ইষ্টকালকে longitude correction ছাড়া sidereal time ভাবাও ভুল।

পূর্ণ calculation pipeline

  1. Local date, clock time, location ও IANA/Windows time-zone গ্রহণ করুন;
  2. DST ambiguity/invalid time সমাধান করে একটি DateTimeOffset instant তৈরি করুন;
  3. Instant-টি UTC এবং Julian Day UT-তে রূপান্তর করুন;
  4. ঐ location-এর sunrise গণনা করে ইষ্টকালের anchor নির্ধারণ করুন;
  5. UTC/JD থেকে Greenwich sidereal time এবং longitude যোগ করে local sidereal time নির্ণয় করুন;
  6. Latitude, local sidereal time ও true obliquity দিয়ে tropical Ascendant/MC নির্ণয় করুন;
  7. নির্বাচিত sidereal mode—এই project-এ Lahiri—প্রয়োগ করে nirayana lagna নিন;
  8. নির্বাচিত house system অনুসারে ১২টি cusp, madhya ও sandhi নির্ণয় করুন;
  9. একই reference profile ও raw longitude থেকে chart, table, API এবং XML render করুন।

গুরুত্বপূর্ণ: Time-zone offset, latitude এবং longitude একই ধরনের input নয়। Kolkata ও Dhaka-র clock offset কখনও একই হতে পারে, কিন্তু longitude আলাদা হওয়ায় একই instant-এ তাদের local sidereal time ও লগ্ন আলাদা হবে।

Civil time থেকে একটিমাত্র exact instant

“৮ অক্টোবর ২০২৬, সকাল ১০টা” নিজে একটি পূর্ণ astronomical instant নয়। Location/zone না দিলে একই clock label পৃথিবীর বিভিন্ন স্থানে বিভিন্ন UTC instant বোঝায়। তাই calculation input-এ অন্তত নিচের data রাখতে হবে:

  • Local calendar date এবং clock time;
  • Time-zone ID—যেমন India Standard Time, Bangladesh Standard Time বা Eastern Standard Time;
  • UTC offset used at that instant;
  • Latitude—উত্তর positive, দক্ষিণ negative;
  • Longitude—পূর্ব positive, পশ্চিম negative;
  • Calendar label—proleptic Gregorian, Julian অথবা historical civil label;
  • Input precision—exact, rounded, estimated বা unknown.

DST-এর দুই বিপদ

Invalid local time: Spring-forward-এর সময় কোনো কোনো clock interval অস্তিত্বই রাখে না। Ambiguous local time: Fall-back-এর সময় একই local label দুবার ঘটে। এই ক্ষেত্রে software-এর নিজের মতো offset বেছে নেওয়া উচিত নয়; user-কে আগে/পরে occurrence নির্বাচন করাতে হবে।

ইষ্টকাল: কোন সূর্যোদয় থেকে?

ইষ্টকাল বা iṣṭakāla সাধারণত জন্মের সংশ্লিষ্ট সাবন দিনের সূর্যোদয় থেকে জন্মমুহূর্ত পর্যন্ত elapsed time।

ইষ্টকাল (seconds) = জন্মমুহূর্ত UTC − anchor sunrise UTC

Fixed দণ্ড = ইষ্টকাল seconds ÷ ১৪৪০

জন্ম যদি আজকের সূর্যোদয়ের আগে হয়, anchor হবে আগের civil date-এর সূর্যোদয়। ফলে রাত ২টার জন্মের ইষ্টকাল মধ্যরাতে শূন্য হয় না; আগের sunrise থেকে চলতে থাকে। এটি পঞ্জিকার “নিশা” convention-এর সঙ্গেও সামঞ্জস্যপূর্ণ।

জন্মমুহূর্তইষ্টকাল anchorসাবন দিন
Sunrise-এর ঠিক পরেএকই civil date-এর sunriseনতুন দিন
দুপুর বা সন্ধ্যাএকই civil date-এর sunriseএকই দিন
মধ্যরাতের পরে, next sunrise-এর আগেআগের civil date-এর sunriseআগের sunrise-day
ঠিক next sunriseনতুন sunriseপরের দিন; ইষ্টকাল ০

Sunrise calculation profile-ও metadata-তে রাখতে হবে—Sun center না upper limb, refraction on/off, elevation এবং pressure/temperature model। Profile বদলালে ইষ্টকাল বদলাবে; exact birth instant বদলাবে না।

Zone noon, mean noon এবং apparent solar noon

ঘড়িতে ১২টা বাজলেই সূর্য স্থানীয় meridian পার হয় না। তিনটি noon আলাদা:

  • Zone noon: Time-zone clock-এর 12:00;
  • Local mean noon: ঐ longitude-এর mean solar time 12:00;
  • Apparent solar noon: সূর্যের বাস্তব meridian transit-এর instant।

Local mean solar time-এর সহজ relation:

LMT hours = UTC hours + longitude ÷ ১৫

পূর্ব longitude positive; পশ্চিম longitude negative.

Zone meridian থেকে প্রতি ১° longitude পার্থক্যে mean solar clock প্রায় ৪ মিনিট সরে। কিন্তু apparent noon পেতে equation of time-ও ধরতে হয়। সবচেয়ে নিরাপদ পদ্ধতি হলো ephemeris transit function দিয়ে স্থানীয় Sun meridian crossing নির্ণয় করা।

লগ্নের জন্য noon দরকার? না। Noon একটি useful diagnostic ও traditional reference; লগ্ন সরাসরি exact UT/JD এবং location থেকে গণনা করা যায়।

Greenwich ও local sidereal time

Sidereal time সূর্যঘড়ি নয়; এটি নক্ষত্রপটের তুলনায় পৃথিবীর rotation angle-এর একটি time-like প্রকাশ। Modern calculation-এ UT1 এবং TT-এর যথাযথ astronomical relation ব্যবহার করা উত্তম। সাধারণ educational approximation-এ UTC-কে UT1-এর কাছাকাছি ধরা হলেও production ephemeris library ব্যবহার করাই নিরাপদ।

Local sidereal angle = Greenwich sidereal angle + geographic longitude

Result-টি ০°–৩৬০° বা ০–২৪ sidereal hour-এ normalize করুন।

Longitude-এর sign উল্টে গেলে লগ্নে বড় ভুল হয়। এই project-এর convention:

  • Kolkata ≈ +88.35°;
  • Dhaka ≈ +90.4125°;
  • New York ≈ −74.006°.

U.S. Naval Observatory-এর approximate GMST expression UT Julian date থেকে Greenwich sidereal time নির্ণয় করে; high-precision production code-এ Swiss Ephemeris বা IAU SOFA routine ব্যবহার করা ভালো।

Ascendant বা জন্মলগ্ন কী?

Ascendant হলো নির্দিষ্ট instant ও location-এ eastern horizon যেখানে ecliptic-কে ছেদ করে সেই zodiac longitude। এটি কেবল “প্রতি দুই ঘণ্টায় একটি রাশি” নয়। Latitude, obliquity ও season-এর কারণে signs-এর rising time অসমান।

Manual tropical approximation-এ local sidereal angle θ, geographic latitude φ এবং ecliptic obliquity ε থেকে:

λ0 = atan2(−cos θ, sin θ · cos ε + tan φ · sin ε)

λAsc = normalize(λ0 + ১৮০°)

প্রথম result-কে ০°–৩৬০°-এ normalize করার পর opposite intersection নিয়ে eastern rising point নির্বাচন করতে হয়।

এই formula শিক্ষামূলক cross-check হিসেবে উপযোগী। Production result-এর জন্য nutation, true equator/equinox এবং polar cases সামলাতে Swiss Ephemeris house function ব্যবহার করুন। Swiss Ephemeris Ascendant-কে সবসময় ecliptic-এর eastern rising point হিসেবে অগ্রাধিকার দেয়।

জন্মসময়ের precision কেন গুরুত্বপূর্ণ?

পৃথিবীর rotation-এর কারণে কয়েক মিনিটের time error-এ Ascendant degree লক্ষণীয়ভাবে সরে যেতে পারে; sign boundary বা house cusp-এর কাছে ফলও বদলাতে পারে। “লগ্ন প্রতি চার মিনিটে ঠিক এক degree” কেবল একটি rough average—সব latitude ও sign-এ সমান নয়। তাই estimated birth time-কে exact বলে প্রকাশ করা উচিত নয়।

Tropical থেকে nirayana: ayanāṃśa profile

Tropical longitude equinox of date-এর সঙ্গে যুক্ত; nirayana বা sidereal longitude একটি নির্বাচিত fixed-star reference অনুযায়ী ayanāṃśa প্রয়োগ করে। এই project-এর Swiss-Ephemeris profile হলো Lahiri।

শুধু একটি point-এর explanatory relation:

Nirayana longitude = normalize(tropical longitude − ayanāṃśa)

তবে পূর্ণ house cusp-এর জন্য tropical cusp থেকে নিজে নিজে ayanāṃśa বাদ দেওয়ার বদলে library-এর sidereal house mode ব্যবহার করুন। Swiss Ephemeris-এ প্রথমে swe_set_sid_mode(), তারপর swe_houses_ex()-এ sidereal flag দিতে হয়।

Profile label আবশ্যক: “নিরয়ণ লগ্ন” একাই যথেষ্ট নয়। Output-এ ayanāṃśa name, value, ephemeris version, house system এবং coordinate convention লিখুন। Lahiri, Raman বা অন্য mode বদলালে degree এবং কখনও sign-ও বদলাতে পারে।

লগ্ন, রাশি চক্র ও ভাবচালিত চক্র এক নয়

রাশি চক্রে প্রতিটি sign ৩০°। কিন্তু ভাবচালিত চক্র selected house system-এর cusp ও sandhi অনুযায়ী ভাগ হয়। তাই কোনো গ্রহ যে রাশিতে আছে, সে অবশ্যই একই নম্বর ভাবেও থাকবে—এমন নয়।

বস্তুকী দেখায়পরিবর্তনের কারণ
রাশি চক্র১২টি সমান ৩০° zodiac sign-এ গ্রহAyanāṃśa ও planetary longitude
লগ্নEastern horizon-এর ecliptic longitudeTime, latitude, longitude
ভাবমধ্য/cusp১২ ভাবের reference pointHouse system, LST, latitude
ভাবসন্ধিAdjacent ভাবের boundarySelected sandhi rule
ভাবচালিতBoundary অনুসারে গ্রহের ভাবস্থিতিCusp/sandhi এবং গ্রহের longitude

ConversionTools.aspx-এ তাই Nirayana Lagna, Nirayana MC ও Ayanāṃśa-র সঙ্গে প্রতিটি ভাবের start sandhi, madhya, end sandhi এবং planets আলাদাভাবে দেখানো উচিত।

C# 5 implementation

নিচের code framework-টি আপনার .NET Framework/C# 5 application-এর জন্য। Swiss Ephemeris wrapper-এর class বা constant name আপনার project অনুযায়ী সামান্য বদলাতে হতে পারে।

১. Input model

public sealed class LagnaRequest
{
    public DateTime LocalClock { get; set; }       // Kind = Unspecified
    public string TimeZoneId { get; set; }
    public TimeSpan? ChosenUtcOffset { get; set; } // DST overlap হলে required
    public double Latitude { get; set; }
    public double Longitude { get; set; }          // East +, West -
    public string AyanamsaName { get; set; }
    public char HouseSystem { get; set; }
}

public sealed class LagnaResult
{
    public DateTimeOffset Instant { get; set; }
    public double JulianDayUt { get; set; }
    public double NirayanaLagna { get; set; }
    public double NirayanaMc { get; set; }
    public double Ayanamsa { get; set; }
    public double[] Cusps { get; set; }
    public TimeSpan IshtaKala { get; set; }
    public DateTimeOffset AnchorSunrise { get; set; }
}

২. Local clock resolve করুন

static DateTimeOffset ResolveLocalClock(LagnaRequest r)
{
    TimeZoneInfo zone = TimeZoneInfo.FindSystemTimeZoneById(r.TimeZoneId);
    DateTime local = DateTime.SpecifyKind(r.LocalClock, DateTimeKind.Unspecified);

    if (zone.IsInvalidTime(local))
        throw new ArgumentException(
            "এই local time DST spring-forward gap-এর মধ্যে পড়েছে।");

    if (zone.IsAmbiguousTime(local))
    {
        TimeSpan[] choices = zone.GetAmbiguousTimeOffsets(local);
        if (!r.ChosenUtcOffset.HasValue ||
            Array.IndexOf(choices, r.ChosenUtcOffset.Value) < 0)
            throw new ArgumentException(
                "এই local time দুইবার ঘটেছে; UTC offset নির্বাচন করুন।");

        return new DateTimeOffset(local, r.ChosenUtcOffset.Value);
    }

    return new DateTimeOffset(local, zone.GetUtcOffset(local));
}

৩. UTC instant থেকে Julian Day

static double ToJulianDayUt(DateTimeOffset instant)
{
    DateTime epoch = new DateTime(
        1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
    return 2440587.5 + (instant.UtcDateTime - epoch).TotalDays;
}

এই helper proleptic Gregorian DateTime input ধরে। Historical Julian label থাকলে আগে calendar-aware converter দিয়ে astronomical JD তৈরি করুন; label-কে Gregorian constructor-এ সরাসরি দেবেন না।

৪. Sunrise anchor ও ইষ্টকাল

static TimeSpan CalculateIshtaKala(
    DateTimeOffset birth,
    DateTimeOffset sunriseOnCivilDate,
    DateTimeOffset sunrisePreviousDate,
    out DateTimeOffset anchor)
{
    anchor = birth >= sunriseOnCivilDate
        ? sunriseOnCivilDate
        : sunrisePreviousDate;

    TimeSpan value = birth.ToUniversalTime() - anchor.ToUniversalTime();
    if (value < TimeSpan.Zero || value.TotalHours > 27.0)
        throw new InvalidOperationException("ইষ্টকাল anchor যাচাই করুন।");
    return value;
}

৫. Carry-safe দণ্ড-পল-বিপল

static string FormatIshtaKala(TimeSpan elapsed)
{
    // ১ দণ্ড = ১৪৪০ sec; ১ পল = ২৪ sec; ১ বিপল = ০.৪ sec
    long totalHundredthsOfVipala = (long)Math.Round(
        elapsed.TotalSeconds * 250.0,
        MidpointRounding.AwayFromZero);

    const long perPala = 6000L;
    const long perDanda = 360000L;

    long danda = totalHundredthsOfVipala / perDanda;
    long rem = totalHundredthsOfVipala % perDanda;
    long pala = rem / perPala;
    rem %= perPala;
    long vipala = rem / 100L;
    long fraction = rem % 100L;

    return String.Format(
        CultureInfo.InvariantCulture,
        "{0}/{1:00}/{2:00}.{3:00}",
        danda, pala, vipala, fraction);
}

৬. Swiss Ephemeris দিয়ে sidereal houses

static LagnaResult CalculateLagna(
    LagnaRequest r,
    DateTimeOffset sunriseToday,
    DateTimeOffset sunrisePrevious,
    SwissEph swe)
{
    if (r.Latitude < -90.0 || r.Latitude > 90.0)
        throw new ArgumentOutOfRangeException("Latitude");
    if (r.Longitude < -180.0 || r.Longitude > 180.0)
        throw new ArgumentOutOfRangeException("Longitude");

    DateTimeOffset instant = ResolveLocalClock(r);
    double jdUt = ToJulianDayUt(instant);

    // Project profile: Lahiri nirayana.
    swe.swe_set_sid_mode(SwissEph.SE_SIDM_LAHIRI, 0.0, 0.0);

    double[] cusps = new double[13];
    double[] ascmc = new double[10];
    int flags = SwissEph.SEFLG_SIDEREAL;

    int status = swe.swe_houses_ex(
        jdUt, flags, r.Latitude, r.Longitude,
        r.HouseSystem, cusps, ascmc);
    if (status < 0)
        throw new InvalidOperationException("House calculation failed.");

    DateTimeOffset anchor;
    TimeSpan ishta = CalculateIshtaKala(
        instant, sunriseToday, sunrisePrevious, out anchor);

    return new LagnaResult {
        Instant = instant,
        JulianDayUt = jdUt,
        NirayanaLagna = Normalize360(ascmc[0]),
        NirayanaMc = Normalize360(ascmc[1]),
        Ayanamsa = swe.swe_get_ayanamsa_ut(jdUt),
        Cusps = cusps,
        IshtaKala = ishta,
        AnchorSunrise = anchor
    };
}

ascmc[0] Ascendant এবং ascmc[1] MC। cusps[0] unused; ১–১২ index-এ houses। Array size ১৩-এর কম দিলে native wrapper crash করতে পারে—Swiss documentation-এ এই বিষয়ে বিশেষ সতর্কতা আছে।

৭. Degree থেকে রাশি ও অংশ

static readonly string[] RasiBn = {
    "মেষ", "বৃষ", "মিথুন", "কর্কট", "সিংহ", "কন্যা",
    "তুলা", "বৃশ্চিক", "ধনু", "মকর", "কুম্ভ", "মীন"
};

static double Normalize360(double value)
{
    value %= 360.0;
    return value < 0.0 ? value + 360.0 : value;
}

static string FormatRasiLongitude(double longitude)
{
    double x = Normalize360(longitude);
    int sign = (int)Math.Floor(x / 30.0);
    double within = x - sign * 30.0;
    int degree = (int)Math.Floor(within);
    double minuteRaw = (within - degree) * 60.0;
    int minute = (int)Math.Floor(minuteRaw);
    int second = (int)Math.Round((minuteRaw - minute) * 60.0);

    if (second == 60) { second = 0; minute++; }
    if (minute == 60) { minute = 0; degree++; }
    if (degree == 30) {
        degree = 0;
        sign = (sign + 1) % 12;
    }

    return String.Format(CultureInfo.InvariantCulture,
        "{0} {1}° {2:00}′ {3:00}″", RasiBn[sign], degree, minute, second);
}

ঐতিহাসিক জন্মতারিখে Julian/Gregorian সমস্যা

১৫৮২ সালের calendar reform-এর আগের একটি printed “date” Gregorian না Julian—তা না জানলে একই label ভিন্ন JD তৈরি করবে। ১৭৫২ সালেও সব অঞ্চলে একই দিনে civil reform ঘটেনি। তাই historical input-এ তিনটি field আলাদা রাখুন:

  • source_calendar: Julian / Gregorian / regional civil;
  • astronomical_jd_ut: calculation-এর canonical instant;
  • display_labels: প্রয়োজনে dual Julian/Gregorian date.

Calendar label বদলালে একই physical instant-এর JD, sidereal time বা লগ্ন বদলাবে না। কেবল ভুল label-কে ভুল calendar-এ parse করলে instant বদলে যাবে।

পুরোনো local time-এর আরেক সমস্যা

বর্তমান time-zone database-এর standard offset খুব পুরোনো local mean time-এর জন্য সবসময় ঐতিহাসিক দলিলের exact offset নয়। Railway/standard time চালুর আগের record-এ location longitude থেকে local mean time reconstruction, source note এবং uncertainty range রাখা উচিত।

প্রস্তাবিত API output

{
  "input": {
    "local_clock": "2026-10-08T10:30:00",
    "time_zone": "India Standard Time",
    "utc_offset": "+05:30",
    "latitude": 22.5833,
    "longitude": 88.3500,
    "precision": "exact-to-minute"
  },
  "instant": {
    "utc": "2026-10-08T05:00:00Z",
    "julian_day_ut": 2461321.708333
  },
  "ishta_kala": {
    "anchor": "sunrise",
    "elapsed_seconds": 0,
    "danda_pala_vipala": "00/00/00.00"
  },
  "lagna": {
    "reference": "nirayana",
    "ayanamsa": "Lahiri",
    "house_system": "W",
    "longitude": 0.0,
    "mc_longitude": 0.0
  }
}

উপরের শূন্য values schema example—calculated sample নয়। Documentation-এ fabricated astronomical result না দিয়ে real engine response বসানো উচিত।

Validation checklist

  1. Local DateTime.Kind Unspecified;
  2. Zone ID required;
  3. DST invalid time rejected;
  4. DST ambiguous time requires explicit offset;
  5. Latitude −৯০° থেকে +৯০°;
  6. Longitude −১৮০° থেকে +১৮০°;
  7. East positive, west negative test;
  8. UTC round-trip unchanged;
  9. JD noon boundary test;
  10. Gregorian leap-year test;
  11. Historical Julian label test;
  12. 1582 dual-date test;
  13. 1752 regional label test;
  14. Birth exactly at sunrise → ইষ্টকাল ০;
  15. Birth one second before sunrise → previous anchor;
  16. Birth one second after sunrise → current anchor;
  17. Post-midnight birth keeps previous sunrise-day;
  18. Sunrise profile stored;
  19. High elevation profile test;
  20. GMST normalized to ০–২৪h;
  21. LST longitude sign regression;
  22. Kolkata reference case;
  23. Dhaka reference case;
  24. New York standard-time case;
  25. New York daylight-time case;
  26. Lahiri mode set before houses;
  27. Sidereal flag present;
  28. Cusp array length ১৩;
  29. ascmc array length ১০;
  30. Ascendant normalized to ০°–৩৬০°;
  31. 29°59′59.9″ carry test;
  32. 359°59′59.9″ → 0° carry test;
  33. Near-sign-boundary input warning;
  34. Estimated birth-time uncertainty shown;
  35. Manual Ascendant formula cross-check;
  36. Swiss swetest comparison;
  37. MC comparison;
  38. All ১২ cusp comparison;
  39. Rashi chart and table use same longitude;
  40. Bhava Chalita uses cusp/sandhi, not sign number;
  41. API and HTML use same raw doubles;
  42. XML preserves UTC instant;
  43. Ayanāṃśa value and name printed;
  44. House-system code printed;
  45. Ephemeris version printed;
  46. Cache key includes instant/location/profile;
  47. No rounding before final formatting;
  48. NaN/Infinity rejected;
  49. Polar/high-latitude house warning;
  50. Thread-safe Swiss Ephemeris access;
  51. Regression snapshot retained.

সাধারণ ভুল এবং সমাধান

ভুলকেন ভুলসমাধান
Local clock-কে UTC ধরে নেওয়াInstant কয়েক ঘণ্টা সরে যায়Time-zone + actual offset resolve করুন
আজকের UTC offset সব historical date-এ ব্যবহারDST ও historical zone rule বদলায়Date-specific zone conversion
Birth-before-sunrise-এ আজকের sunriseNegative ইষ্টকালPrevious sunrise anchor
Longitude west positiveLST উল্টো দিকে সরেEast +, west − convention
ইষ্টকাল থেকেই সরাসরি লগ্নLongitude/latitude/earth rotation বাদ পড়েExact JD UT + location
Tropical লগ্নকে nirayana labelAyanāṃśa প্রয়োগ হয়নিSidereal mode/flag
Sign = house ধরে নেওয়াBhava boundary আলাদা হতে পারেCusp ও sandhi ব্যবহার
Intermediate degree round করাBoundary result বদলাতে পারেRaw double রেখে শেষে format

উপসংহার

জন্মসময়কে রাশি চক্রে স্থাপন করার নির্ভরযোগ্য পদ্ধতি হলো: civil label থেকে unambiguous UTC instant, তারপর Julian Day UT, sidereal rotation এবং স্থানীয় horizon geometry। ইষ্টকাল একই instant-কে sunrise-anchored traditional unit-এ প্রকাশ করে; এটি লগ্নের বিকল্প input নয়।

স্থানীয় মধ্যাহ্ন clock-noon থেকে আলাদা, আবার apparent solar transit mean noon থেকে আলাদা। এগুলো traditional time verification-এ গুরুত্বপূর্ণ হলেও modern ephemeris exact instant থেকে সরাসরি Ascendant নির্ণয় করতে পারে।

আপনার application-এ Lahiri mode, sidereal flag, east-positive longitude, explicit DST offset, previous-sunrise rule এবং full profile metadata স্থির রাখলে ConversionTools, Daily Details, Rashi Chart, Bhava Chalita, API ও XML একই reproducible result দেবে।

তথ্যসূত্র ও আরও পাঠ

  1. Swiss Ephemeris—Programming Interface; swe_houses_ex(), sidereal mode, longitude signs, cusp ও ascmc arrays.
  2. Astrodienst—Swiss Ephemeris information; ephemeris scope ও technical background.
  3. U.S. Naval Observatory—Computing Approximate Sidereal Time; Julian dates ও GMST approximation.
  4. IAU SOFA Cookbooks; time scales, Earth rotation এবং sidereal-time standards.
  5. Astrodienst—House Systems; Ascendant-এর geometric definition ও house-system context.
  6. Swiss Ephemeris official source repository; reference implementation ও documentation.
  7. সূর্য সিদ্ধান্ত পঞ্জিকা project specification; sunrise-based day, Lahiri nirayana profile, দণ্ড-পল-বিপল এবং Bhava Chalita output convention.

মন্তব্য, আলোচনা ও প্রশ্ন