به نام خدا

در پارسي‌بلاگتبديل گروهي تاريخ؛ شمسي و قمري و ميلادي

چهارشنبه ۲۰ بهمن ۹۵ - ۶:۴۴ عصر

سايت‌هايي هستند روي اينترنت
و نرم‌افزارهايي قابل دانلود
رايگان
اين‌كه يك تاريخ را تبديل نمايد
بين سه نوع تاريخي كه ما معمولاً با آن‌ها درگير هستيم
شمسي و قمري و ميلادي

با اضافه شدن كلاس PersianCalendar در دات‌نت نيز
تبديل تاريخ آسان گشته
اما هنوز هم
روي اينترنت نديدم ابزاري باشد
مناسب براي تبديل گروهي از تاريخ‌ها
به صورت دسته‌اي
اين‌كه حجمي بدهي و حجمي بگيري
كاري كه زياد پيش مي‌آيد
وقتي در حال تبديل وهله‌اي و يكباره اطلاعات هستيم

چنين ابزاري نوشتم
در اين نشاني
http://pdmcenter.ir/convert
(هاست تمام شد و دلار هم گران، نشد ديگر تمديد كنم و فعلاً روي هواست!)
ابتدا براي خود البته
كاري داشتم و نياز بود
اما
بعدش گفتم عمومي باشد تا به كار ديگران نيز شايد بيايد
خوبي‌اش:
يكهو كلّي تاريخ را يكباره تبديل مي‌كند
ميان همين سه نوع تاريخ معهود
محصول را اگر بچسباني در اكسل
به سادگي در دو ستون قرار مي‌گيرد
ستون مبدأ و ستون مقصد!

از همين Namespace معروف دات‌نت هم استفاده كردم
يعني System.Globalization
كدها را هم مي‌گذارم اين‌جا
به زبان VB است
شايد كسي نداند و بخواهد در كدنويسي خود به كار بندد

براي تبديل ميلادي به شمسي:

Function M2SH(str As String) As String
    "2017/2/8 => 1395/11/19
    Dim f As System.Globalization.PersianCalendar = New System.Globalization.PersianCalendar
    M2SH = f.GetYear(str) & "/" & f.GetMonth(str) & "/" & f.GetDayOfMonth(str)
End Function



و براي ميلادي به قمري:

Function M2GH(str As String) As String
    "2017/2/8 => 1438/5/12
    Dim h As System.Globalization.HijriCalendar = New System.Globalization.HijriCalendar
    M2GH = h.GetYear(str) & "/" & h.GetMonth(str) & "/" & h.GetDayOfMonth(str)
End Function



شمسي به ميلادي:

Function SH2M(str As String) As String
    "1395/11/19 => 2017/2/8
    Dim f As System.Globalization.PersianCalendar = New System.Globalization.PersianCalendar
    Dim yyyy As Integer = DatePart("yyyy", str)
    Dim mm As Integer = DatePart("m", str)
    Dim dd As Integer = DatePart("d", str)
    Dim d As DateTime = f.ToDateTime(yyyy, mm, dd, 0, 0, 0, 0)
    SH2M = d.ToShortDateString()
End Function



شمسي به قمري:

Function SH2GH(str As String) As String
    "1395/11/19 => 1438/5/12
    Dim f As System.Globalization.PersianCalendar = New System.Globalization.PersianCalendar
    Dim h As System.Globalization.HijriCalendar = New System.Globalization.HijriCalendar
    Dim yyyy As Integer = DatePart("yyyy", str)
    Dim mm As Integer = DatePart("m", str)
    Dim dd As Integer = DatePart("d", str)
    Dim d As DateTime = f.ToDateTime(yyyy, mm, dd, 0, 0, 0, 0)
    Dim mi As DateTime = d.ToShortDateString()
    SH2GH = h.GetYear(mi) & "/" & h.GetMonth(mi) & "/" & h.GetDayOfMonth(mi)
End Function



قمري به ميلادي:

Function GH2M(str As String) As String
    "1438/5/12 => 2017/2/8
    Dim h As System.Globalization.HijriCalendar = New System.Globalization.HijriCalendar
    Dim yyyy As Integer = DatePart("yyyy", str)
    Dim mm As Integer = DatePart("m", str)
    Dim dd As Integer = DatePart("d", str)
    Dim d As DateTime = h.ToDateTime(yyyy, mm, dd, 0, 0, 0, 0)
    GH2M = d.ToShortDateString()
End Function



و در نهايت هم قمري به شمسي:

Function GH2SH(str As String) As String
    "1438/5/12 => 1395/11/19
    Dim f As System.Globalization.PersianCalendar = New System.Globalization.PersianCalendar
    Dim h As System.Globalization.HijriCalendar = New System.Globalization.HijriCalendar
    Dim yyyy As Integer = DatePart("yyyy", str)
    Dim mm As Integer = DatePart("m", str)
    Dim dd As Integer = DatePart("d", str)
    Dim d As DateTime = h.ToDateTime(yyyy, mm, dd, 0, 0, 0, 0)
    Dim mi As DateTime = d.ToShortDateString()
    GH2SH = f.GetYear(mi) & "/" & f.GetMonth(mi) & "/" & f.GetDayOfMonth(mi)
End Function


اميد كه به كار ديگران نيز آيد.


مطلب بعدي: كالاي خارجي مطلب قبلي: آرزوهاي توليدي

نظرات

احمدي: مچكرمدوشنبه ۱۹ آذر ۹۷ - ۱۰:۱۶ صبح
پاسخ: در پناه خدا.
مريم احمدي:
سلام
تفريق بين دو تا تاريخ فارسي كه با فرمت nvarchar در اسكيوال ذخيره شدند با اين توابع كه ذكر شد چطور بايد صورت بگيره لطفا راهنمايي كنيد
شنبه ۱۷ آذر ۹۷ - ۳:۴۸ عصر
پاسخ: سلام. تابعي كه در اين نشاني معرفي شده فاصله دو تاريخ را ارائه مي‌كند. به شرطي كه نوع متغيّرها از نوع تاريخ باشد. همان كه با System.Globalization.PersianCalendar به دست آورده‌ايد. http://stackoverflow.com/a/12529154 . مثال‌هاي داده شده در اين نشاني نيز مي‌تواند كمك نمايد: http://docs.microsoft.com/en-us/dotnet/api/microsoft.visualbasic.dateandtime.datediff?view=netframework-4.7.2 . طبيعتاً اگر از توابع شمسي تاريخ استفاده كنيد، همين توابع مي‌تواند تفريق را ميان همان تاريخ‌هاي شمسي انجام دهد. موفق باشيد.
بازگشتنسخه محلّي از نوشته‌هاي وبلاگ شايد سخن حق سال نشر14نوشته‌هاي وبلاگ بر اساس سال برچسب‌ها34نوشته‌هاي وبلاگ بر اساس برچسب بيشترين نظر34نوشته‌هاي وبلاگ با بيشترين تعداد نظر
صفحه اصليبازگشت به صفحه نخست سايت نوشته‌ها776طرح‌ها، برنامه‌ها و نوشته‌ها مكان‌ها68براي چه جاهايي نوشتم زمان‌ها23همه سال‌هايي كه نوشتم جستجودستيابي به نوشته‌ها از طريق جستجو وبلاگ1111با استفاده از سامانه پارسي‌بلاگ نماها2چند فيلم كوتاه از فعاليت‌ها آواها9تعدادي فايل صوتي براي شنيدن سايت‌ها23معرفي سايت‌هاي طراحي شده نرم‌افزارها36سورس نرم‌افزارهاي خودم معرفي6معرفي طراح سايت و آثار و سوابق كاري او فونت‌هاي فارسي60تعدادي قلم فارسي كه معمولاً در نوشته‌هايم استفاده شده است بايگاني وبلاگ1068نسخه محلّي از نوشته‌هاي وبلاگ
با اسكن باركد صفحه را باز كنيد
تماس پيامك ايميل ذخيره
®Movashah ©2018 - I.R.IRAN