تبدیل تاریخ میلادی به تاریخ شمسی

۶ سال پیش(به روز شده در ۵ سال پیش) پایتون(Python)(توابع) ۲

توابع زیر برای تبدیل تاریخ میلادی به شمسی در نظر گرفته شده اند. دوتابع اول مربوط به کبیسه بودن سالهای میلادی و شمسی و تابع آخر مربوط به تبدیل تاریخ است.

def gLeapYear(y):
    if (y%4==0) and ((y%100!=0) or (y%400==0)):
        return True
    else: 
        return False

def sLeapYear(y):
    ary = [1, 5, 9, 13, 17, 22, 26, 30]
    result = False
    b = y%33
    if b in ary: 
        result = True
    return result

def shamsiDate(gyear, gmonth, gday):
    _gl = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335]
    _g  = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334]
    
    deydiffjan = 10
    if gLeapYear(gyear-1):  
        deydiffjan = 11
    if gLeapYear(gyear):  
        gd = _gl[gmonth-1]+gday
    else: 
        gd = _g[gmonth-1]+gday
    
    if gd>79:
        sy = gyear - 621
        gd = gd - 79
        if gd<=186:
            gmod = gd%31
            if gmod==0:
                sd = 31
                sm = int(gd/31)
            else:
                sd = gmod
                sm = int(gd/31) + 1
        else:
            gd = gd - 186
            gmod = gd%30
            if gmod==0:
                sd = 30
                sm = int(gd/30) + 6
            else:
                sd = gmod
                sm = int(gd/30) + 7
    else:
        sy = gyear - 622
        gd = gd+deydiffjan
        gmod = gd%30
        if gmod==0:
            sd = 30
            sm = int(gd/30) + 9 
        else:
            sd = gmod; 
            sm = int(gd/30) + 10 

    result = [sy, sm, sd]
    return result

print shamsiDate(2013, 12, 14) //out = [1392, 9, 23]

برچسبها

هیچ برچسبی موجود نیست.

صفحات پیشنهادی

تابع محاسبه حجم فایل یا طول رشته بهمراه نمایش به فرمتهای مختلف...

در بخش زیرین دو تابع معرفی شده اند. تابع اول اندازه فایل را گرفته و سپس اندازه آن را با توجه به نوع فرمت مشخص شده و حداکثر ارقام اعشار بر می گرداند. تابع دوم نیز نام فایل را گرفته و سپس اندازه آنرا با...

ایجاد فایل utf8 در صورت نبود آن...

تابع زیر فایل مورد نظر را با کدینگ utf8 ایجاد می کند. import os.path def createFileIfNotExist(path): if os.path.exists(path)==False: with codecs.open(path, 'a', encoding='utf-8') as file: ...

تابع محاسبه اختلاف بین دو تاریخ یا تاریخ فعلی...

تابع زیر اختلاف بین تاریخ ورودی با تاریخ امروز(روز جاری) را به روز بر می گرداند. import datetime def diffNowDate(DateStr): from datetime import datetime fmt = '%Y-%m-%d' d2 = datetime.strpti...

تابع کنترل رشته ورودی...

تابع ساده زیر جهت آشنایی با توابع داخلی پایتون است. در تابع زیر , رشته ورودی را گرفته و سپس در صورت وجود یکی از کاراکترهای مشخص شده در داخل رشته مقدار False و در غیر اینصورت True را بر می گرداند. def ...

2 نظر

gravatar  رضا
۳ سال پیش - بررسی شده - نوشته شده توسط مهمان

با سلام و همچنین تشکر از مطلب خوبتون، خیلی بدردم خورد.
اگه براش توضیح بزارین که متوجه شیم چی به چیه خیلی ممنون می شم.
افرادی هم که می خوان تاریخ همون روز رو به شمسی تبدیل کنن می تونن اول کدها
from datetime import datetime
رو اضافه کنن و آخر کد ها به جای خط آخر از این کدها استفاده کنن:
shamsidata=shamsiDate(datetime.now().year,datetime.now().month,datetime.now().day)
shamsi_data=str(shamsidata[0])
shamsi_data+='/'
shamsi_data+=str(shamsidata[1])
shamsi_data+='/'
shamsi_data+=str(shamsidata[2])
print(shamsi_data)

admin
۳ سال پیش - نوشته شده توسط مدیر

ممنون. این کدها بر اساس الگوریتم تبدیل تاریخ میلادی به شمسی پیاده سازی شده اند و خود کد توضیحات خاصی ندارد. sLeapYear مربوط به کبیسه بودن سال شمسی است و تابع gLeapYear مربوط به شناسایی کبیسه بودن سال میلادی است. البته sLeapYear در تابع اصلی ما کاربرد ندارد و جهت آموزش قرار داده شده است.

captcha image reload