PDA

View Full Version : سوال: تبدیل شمسی به میلادی و بالعکس



neverlieme
یک شنبه 13 مرداد 1392, 18:09 عصر
سلام
من تقریبا کل پست های سایت رو در این باره زیر و رو کردم
یک فایل dll پیدا کردم که داخلش توابع تبدیلات تاریخ شمسی به میلادی و جود داشت اما نمیشد به عنوان کلاس در وی بی استفاده کرد
میخواستم ببینم دوستان اگه تابع یا فایل dll دارن که میشه این کارو به شکل درست. تاکید می کنم درست و حداقل با دقت چند صد سال دارن رو ضمیمه کنن.
ممنون

Fery666
یک شنبه 13 مرداد 1392, 23:42 عصر
این کد برای تبدیل میلادی به شمسی هستش :
توی ماژول بریزید :



Module Module1

Dim MYear As Double = CDbl(Tarikh.Now.Year)
Dim Day As Integer = CInt(Tarikh.Now.Day)
Dim Month As Integer = CInt(Tarikh.Now.Month)
Dim WeekNo As Integer = CInt(Tarikh.Now.DayOfWeek)
Dim Kabise As Integer
Dim SYear As Double = (MYear - 621)
Dim Tarikh As Date
Dim rooz As String
Dim Moon As String
Dim NM As String

Public Function MiladiToShamsi(ByVal MDate As Date) As String
MiladiToShamsi = ""
Dim pc As New Globalization.PersianCalendar
Dim Sal As Integer = pc.GetYear(MDate)
Dim Mah As Integer = pc.GetMonth(MDate)
Dim Roz As Integer = pc.GetDayOfMonth(MDate)


Select Case WeekNo
Case 1
rooz = "دوشنبه"
Case 2
rooz = "سه شنبه "
Case 3
rooz = "چهار شنبه"
Case 4
rooz = "پنجشنبه"
Case 5
rooz = "جمعه"
Case 6
rooz = "شنبه"
Case 0
rooz = "یکشنبه"
End Select

Select Case Format(Mah, "0")
Case 1
Moon = "فروردین"
Case 2
Moon = "اردیبهشت"
Case 3
Moon = "خرداد"
Case 4
Moon = "تیر"
Case 5
Moon = "مرداد"
Case 6
Moon = "شهریور"
Case 7
Moon = "مهر"
Case 8
Moon = "آبان"
Case 9
Moon = "آذر"
Case 10
Moon = "دی"
Case 11
Moon = "بهمن"
Case 12
Moon = "اسفند"

End Select

MiladiToShamsi = rooz & " " & Format(Roz, "00") & " " & Moon & " " & Format(Sal, "0000")

Return MiladiToShamsi
End Function

Public Function Miladi()

Select Case Month
Case 1
NM = "ژانویه"
Case 2
NM = "فوریه"
Case 3
NM = "مارس"
Case 4
NM = "آوریل"
Case 5
NM = "مه"
Case 6
NM = "ژوئن"
Case 7
NM = "ژولای"
Case 8
NM = "آگوست"
Case 9
NM = "آگوست"
Case 10
NM = "اکتبر"
Case 1
NM = "نوامبر"
Case 12
NM = "دسامبر"
End Select

Miladi = Day & " " & NM & " " & MYear

Return Miladi

End Function

End Module



اینم برای نمایش در فرم هستش :
Dates.Text = MiladiToShamsi(Date.Now)

برای شمسی به میلادی رو ندارم :افسرده:

alonmahdi
دوشنبه 14 مرداد 1392, 00:21 صبح
سلام من این کد ها رو البته به زبان سی شارپ دارم ببین شاید کارت راه بیوفته


1-

DateTime dt = new DateTime(2010, 3, 21,12,26,10);
lbl1.Text = dt.ToShortTimeString();

2-

DateTime dt = new DateTime(2010, 3, 21,12,26,10);
lbl1.Text = dt.ToShortDateString();

3-
DateTime dt = new DateTime(2010, 3, 21,12,26,10);
lbl1.Text = dt.ToString();


4- use of system date: DateTime.Now

DateTime dt2 = DateTime.Now;
lbl1.Text = dt2.ToString();

5-

DateTime dt2 = DateTime.Now;
lbl1.Text = dt2.ToLongTimeString();

6- 10 days,year,minutes ---->Before, after

DateTime dt2 = DateTime.Now;
DateTime dt3 = dt2.AddDays(10);
lbl1.Text = dt.ToString();
7-
DateTime dt = new DateTime(2010,4, 21,12,26,10);
DateTime dt3 = dt.AddDays(10);
lbl1.Text = dt3.ToString();
8-
DateTime dt = new DateTime(2010,4, 21,12,26,10,7);
lbl1.Text = dt.DayOfWeek.ToString();

9-

DateTime dt = new DateTime(2010,4, 21,12,26,10,7);
lbl1.Text = dt.DayOfYear.ToString();

10-
DateTime dt = new DateTime(2010,4, 21,12,26,10,7);
lbl1.Text = dt.Day.ToString();
11-

DateTime dt = new DateTime(2010,4, 21,12,26,10,7);
lbl1.Text = dt.Date.Month.ToString();


12-

DateTime dt = new DateTime(2010,4, 21,12,26,10,7);
lbl1.Text = DateTime.DaysInMonth(2010, 4).ToString();
13-
3/12/1988
2010/2/13



DateTime dt = new DateTime(2010,4, 21,12,26,10,7);
lbl1.Text = DateTime.Parse("3/12/2009").ToString()

14-

DateTime dt = new DateTime(2010,4, 21,12,26,10,7);
lbl1.Text = DateTime.Now.Date.Month.ToString();
15-

DateTime dt = new DateTime(2010,4, 21,12,26,10,7);
lbl1.Text = DateTime.UtcNow.ToString();

DateTime -----> persian Calnedar:

System.Globalization.PersianCalendar pc = new System.Globalization.PersianCalendar();
label1.Text = pc.ToDateTime(1366,4,6, 5, 4, 3, 2).ToString();
-------------
16-
System.Globalization.PersianCalendar pc = new System.Globalization.PersianCalendar();
label1.Text = pc.GetYear(DateTime.Now).ToString();
------------
17-
DayOfWeek dow = pc.GetDayOfWeek(DateTime.Now);
label1.Text = dow.ToString();

neverlieme
دوشنبه 14 مرداد 1392, 06:05 صبح
پست آقای fery666 عالی بود فقط بالعکس رو نداشت
کسی هست که بالعکسش رو داشته باشه؟
یعنی تبدیل شمسی به میلادی؟

Fery666
دوشنبه 14 مرداد 1392, 13:14 عصر
اینم برای تبدیل تاریخ شمسی به میلادی و میلادی به هجری قمری :

یه Button و 2 تکس باکس ایجاد کنید و این کد رو توی فرم کپی کنید .




Public Class Form1


Function MiladiTohijri(ByVal Year As Integer, ByVal Month As Integer, ByVal Day As Integer) As String

Try


Dim Date_M As Date = Year & "/" & Month & "/" & Day

Dim Date_Sh As New Globalization.HijriCalendar

Return Date_Sh.GetYear(Date_M) & "/" & Format(Date_Sh.GetMonth(Date_M), "00") & "/" & Format(Date_Sh.GetDayOfMonth(Date_M), "00")


Catch ex As Exception

Return 0

End Try

End Function

Function ShamsiToMiladi(ByVal ShamsiDate As String) As String


If IsNumeric(ShamsiDate.Replace("/", "")) = False Then Return 0

Try


If ShamsiDate.Length <> 10 Then Return 0

Dim Date_Sh As New Globalization.PersianCalendar()

Dim Date_M As DateTime = Date_Sh.ToDateTime(ShamsiDate.Substring(0, 4), ShamsiDate.Substring(5, 2), _
ShamsiDate.Substring(8, 2), _
0, 0, 0, 0, _
Globalization.PersianCalendar.PersianEra)

Return Date_M.ToShortDateString


Catch ex As Exception

Return 0

End Try


End Function



Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

TextBox1.Text = MiladiTohijri(2013, 8, 5)
TextBox2.Text = ShamsiToMiladi("1392/05/14")


End Sub

End Class

neverlieme
سه شنبه 15 مرداد 1392, 15:31 عصر
ربطی به برنامه نویسی نداره ولی اگه دوستان به جای شمسی از خورشیدی تو تعریف متغیراتون و است توابعتون استفاده می کردید خیلی بهتر بود.
ممنون