مشکل در تبدیل تاریخ شمسی به میلادی روز 31 ماه
سلام دوستان
من تو برنامم برای نشان دادن تاریخ و تبدیل تاریخ میلادی به شمسی از کد زیر استفاده میکنم . ابتدا تاریخ رو از بانک بازیابی کرده و بعد اونو تبدیل میکنم.
Dim pc As New System.Globalization.PersianCalendar()
Dim dt As New Date()
dim date as string= pc.GetYear(dt).ToString() & "/" & pc.GetMonth(dt).ToString() & "/" & _
pc.GetDayOfMonth(dt).ToString()
اما تاریخ هایی که باید تبدیل به روز 31 ماه بشن مشکل داره و تبدیل نمیشه
ممکنه کمک کنید...:ناراحت::ناراحت::ناراح ت:
نقل قول: مشکل در تبدیل تاریخ شمسی به میلادی روز 31 ماه
سلام دوستم من
من با متد زیر هر تاریخ میلادی رو به راحتی به شمسی تبدیل میکنم
''' <summary>
''' تبدیل تاریخ میلادی به شمسی
''' </summary>
''' <param name="MDate">فرمت ورودی تاریخ : MM-dd-yyyy</param>
''' <returns></returns>
''' <remarks></remarks>
Function MiladiToShamsi(ByVal MDate As Date) As String
Dim Pcal As New Globalization.PersianCalendar
Return Pcal.GetYear(MDate) & "/" & Pcal.GetMonth(MDate) & "/" & Pcal.GetDayOfMonth(MDate)
End Function
برای مثال
MiladiToShamsi("5/20/2008")
که این خروجی رو میده
1387/2/31
نقل قول: مشکل در تبدیل تاریخ شمسی به میلادی روز 31 ماه
سلام
Dim s AsString = "2008/5/20"
Dim date1 AsString = pc.GetYear(s).ToString() & "/" & pc.GetMonth(s).ToString() & "/" & _
pc.GetDayOfMonth(s).ToString()
MsgBox(date1)
کدی که نوشته بودی دست بود مثلاً من با 2008/5/20 امتحان کردم درست بود
حالا یه سری به بانکت بزن شاید اونجا مشکلی باشه...
نقل قول: مشکل در تبدیل تاریخ شمسی به میلادی روز 31 ماه
تاریخ مورد نظر تو بانکم به این شکله:
2008-10-29 08:38:36.937
نقل قول: مشکل در تبدیل تاریخ شمسی به میلادی روز 31 ماه
من با همین فرمتی که توی بانکتون ذخیره شده هم تست کردم. مشکلی نبود.
Dim D As Date = "2008-5-20 08:38:36.937"
MsgBox(MiladiToShamsi(D))
خروجی
1387/2/31
1 ضمیمه
نقل قول: مشکل در تبدیل تاریخ شمسی به میلادی روز 31 ماه
نقل قول:
نوشته شده توسط
mostafaaa
من با همین فرمتی که توی بانکتون ذخیره شده هم تست کردم. مشکلی نبود.
Dim D As Date = "2008-5-20 08:38:36.937"
MsgBox(MiladiToShamsi(D))
خروجی
1387/2/31
ببینید من یه سری اطلاعات رو از بانک میخونم و با همین تابع شما در دیتا گرید نشونم میدم. تاریخ رو باید به شکل شمسی نشون بدم. اما تاریخ هایی که تو روز 31 ماهه با یه پیغام اروری که میده تبدیل نمیکنه. پیغام ارور رو در زیر گذاتشتم تا ببینید. دقیقا همین تاریخی که شما وارد کردید رو گذاشتم.
نقل قول: مشکل در تبدیل تاریخ شمسی به میلادی روز 31 ماه
سلام دوست من
ایکاش از اول همین Error رو گزاشته بودی. به نظر میرسه مشکل از DataGridView باشه. احتمالا ValueType اون ستونی که توش تاریخ رو نشون میدی DateTime هستش. فکر میکنl با تغییر فرمت اون ستون مشکلت برطرف بشه.
نقل قول: مشکل در تبدیل تاریخ شمسی به میلادی روز 31 ماه
من مستقیما اطلاعات رو از بانک میخونم یعنی DataPropertyName هر ستون رو طبق دستور Select از بانک قرار میدم. با این شرایط چطور میتونم ValueType رو تغییر بدم...؟؟؟
نقل قول: مشکل در تبدیل تاریخ شمسی به میلادی روز 31 ماه
یعنی یه فیلدی توی بانک دارید با فرمت DateTime که توش تاریخ شمسی رو ذخیره کردید؟
اگه اینجوریه که معلومه چرا ارور میده تاریخ رو توی بانک یا به صورت میلادی ذخیره کن و یا اگه میخوای به صورت شمسی ذخیره کنی فرمت فیلدت رو Text بزار.
نقل قول: مشکل در تبدیل تاریخ شمسی به میلادی روز 31 ماه
نه تاریخ توی بانکم به شکل میلادی ذخیره شده و نوعش هم DateTime هست. و میخوام تو دیتاگرید به صورت شمسی نشون بدم
نقل قول: مشکل در تبدیل تاریخ شمسی به میلادی روز 31 ماه
نقل قول:
نوشته شده توسط
mehrnoosh_al62
من مستقیما اطلاعات رو از بانک میخونم یعنی DataPropertyName هر ستون رو طبق دستور Select از بانک قرار میدم. با این شرایط چطور میتونم ValueType رو تغییر بدم...؟؟؟
اگر شما اطلاعات رو مستقیما از بانک می خونین، پس چطور تاریخ شمسی در گرید می خواین نشون بدین؟؟
اما در هر حالٰ شما باید یک ستون در گرید تعریف کنین که valuetype اون از جنس string باشه.
برای چگونگی هم به MSDN مراجعه کنین:لبخندساده:
نقل قول: مشکل در تبدیل تاریخ شمسی به میلادی روز 31 ماه
این ستون از گرید رو تو یه حلقه for تغییرش میدم و تبدیل به شمسی میکنم. به هر حال ممنون مشکلم حل شد
نقل قول: مشکل در تبدیل تاریخ شمسی به میلادی روز 31 ماه
Module Module1
Friend Function PDate(ByVal Model As Integer) As String
Dim PDate1 As String = ""
Dim x As New Globalization.PersianCalendar
Select Case Model
Case 1
PDate1 = x.GetYear(Now) & "/"
If (Len(Trim((x.GetMonth(Now)))) = 1) Then
PDate1 = PDate1 & "0" & x.GetMonth(Now) & "/"
Else
PDate1 = PDate1 & x.GetMonth(Now) & "/"
End If
If (Len(Trim((x.GetDayOfMonth(Now)))) = 1) Then
PDate1 = PDate1 & "0" & x.GetDayOfMonth(Now)
Else
PDate1 = PDate1 & x.GetDayOfMonth(Now)
End If
Case 2
Dim m As String = ""
Dim d As String = ""
Select Case x.GetMonth(Now)
Case 1
m = "فروردين"
Case 2
m = "ارديبهشت"
Case 3
m = "خرداد"
Case 4
m = "تير"
Case 5
m = "مرداد"
Case 6
m = "شهريور"
Case 7
m = "مهر"
Case 8
m = "آبان"
Case 9
m = "آذر"
Case 10
m = "دي"
Case 11
m = "بهمن"
Case 12
m = "اسفند"
End Select
Select Case x.GetDayOfWeek(Now)
Case 0
d = "يكشنبه"
Case 1
d = "دوشنبه"
Case 2
d = "سهشنبه"
Case 3
d = "چهارشنبه"
Case 4
d = "پنجشنبه"
Case 5
d = "جمعه"
Case 6
d = "شنبه"
End Select
PDate1 = d.ToString & " " & x.GetDayOfMonth(Now) & " " & m & " ماه " & x.GetYear(Now)
Case 3
PDate1 = x.GetYear(Now)
If (Len(Trim((x.GetMonth(Now)))) = 1) Then
PDate1 = PDate1 & "0" & x.GetMonth(Now)
Else
PDate1 = PDate1 & x.GetMonth(Now)
End If
If (Len(Trim((x.GetDayOfMonth(Now)))) = 1) Then
PDate1 = PDate1 & "0" & x.GetDayOfMonth(Now)
Else
PDate1 = PDate1 & x.GetDayOfMonth(Now)
End If
End Select
Return PDate1.ToString
End Function
End Module
اين كد رو داخل ماژول قرار بده وبه فرم هاي زير فراخواني كن
messagebox.show(PDate(1))
يا به جاي مقدار 1 مقدارهاي 2 و 3 را قرار بده و نتيجه رو ببين
نقل قول: مشکل در تبدیل تاریخ شمسی به میلادی روز 31 ماه
دوست عزیر این تابعی که شما گذاشتین ورودیش تاریخ هست نه رشته پس باید فیلد شما هم از نوع تاریخ باشه! که میگین نیست. میشه نمونه برنامتونو بذارید تا ایرادو پیدا کنیم؟
نقل قول: مشکل در تبدیل تاریخ شمسی به میلادی روز 31 ماه
سلام بهترین راه اینه که همیشه یک ستون از نوع DateTime باشه و یک ستون از نوع String که در یکی تاریخ میلادی و در یکی تاریخ شمسی نگهداری بشه. اگه این کار رو بکنید میتونین توی گرید هم ،تاریخ شمسی که فرمت رشته ایی داره رو نشون بدین. در ضمن با این کار دیگه توی کریستال هم مشکلی ندارین و احتیاجی به اضافه کردن DLL به اون رو ندارین
نقل قول: مشکل در تبدیل تاریخ شمسی به میلادی روز 31 ماه
برای کار باتاریخ بهترین راه اینه :
1- تاریخ میلادی در بانک ذخیره بشه
2- یک استور پوروسیجر ویا تابع در خود بانک sql server نوشته بشه که تاریخ میلادی را به شمسی تبدیل کنه
3-در هنگام select از بانک تاریخ شمسی را برگردانیم اونوقت به راحتی در هر جایی می توان از ان بهره برداری نمود .
من با این روش کار می کنم هیچ مشکلی ندارم.