PDA

View Full Version : Datagarid ، Format String و تبدیل تاریخ به فارسی



MH2538
چهارشنبه 12 اردیبهشت 1386, 10:46 صبح
سلام
من یک DLL دارم که تاریخ رو به خورشیدی و بالعکس تبدیل می کنه .اما مشکل اینه که تاریخ توی DataBase من میلادی ذخیره می شه حالا می خوام بدونم آیا می شه از ّFormat String برای تبدیل سریع تاریخ ها از میلادی به خورشیدی استفاده کرد.
اگر جواب آره است ؟ راه حل چیه ؟

payam_skandari
چهارشنبه 12 اردیبهشت 1386, 14:55 عصر
برای تبدیل تایخ های میلادی و شمسی به همدیگه خیلی راحت میتونید از کلاس persiancalendar استفاده کنید .خیلی راحت و عالیه

MH2538
چهارشنبه 12 اردیبهشت 1386, 14:58 عصر
دوست عزیز من هم عرض کردم DLL اینکار رو دارم
از بابت تبدیل یک تاریخ مشکلی ندارم
مشکل من اینه که می خوام کل تاریخ هایی که توی ستون مربوطه و در یک DatagridViewzقرار دارند رو یکباره به خورشیدی تبدیل کنم

raravaice
چهارشنبه 12 اردیبهشت 1386, 14:58 عصر
این سورس رو بگیر تاریختو از بانک بخون بریز تو gridview بعد اونو بزار توی for بعد سطر به سطر تبدیلش کن


Module change_date
Function ChangeToShamsi(ByVal DateParam AsString) AsString
Dim m, d, y AsString
m = CInt(Left(DateParam, InStr(DateParam, "/") - 1))
d = CInt(Mid(DateParam, InStr(DateParam, "/") + 1, InStrRev(DateParam, "/") - InStr(DateParam, "/") - 1))
y = CInt(Mid(DateParam, InStrRev(DateParam, "/") + 1))
If y = 0 Then y = 2000
If y < 1000 Then y = y + 1900
Dim temp AsString
If y = 2000 Then
If m > 2 Then
temp = DateSerial(y, m, d)
temp = temp + 1
y = Year(temp)
m = Month(temp)
d = Day(temp)
EndIf
EndIf
'*******************
If m < 3 Or (m = 3 And d < 21) Then
y = y - 622
Else
y = y - 621
EndIf
SelectCase m
Case 1
If d < 21 Then
m = 10 : d = d + 10
Else
m = 11 : d = d - 20
EndIf
Case 2
If d < 20 Then
m = 11 : d = d + 11
Else
m = 12 : d = d - 19
EndIf
Case 3
If d < 21 Then
m = 12 : d = d + 9
Else
m = 1 : d = d - 20
EndIf
Case 4
If d < 21 Then
m = 1 : d = d + 11
Else
m = 2 : d = d - 20
EndIf
Case 5, 6
If d < 22 Then
m = m - 3 : d = d + 10
Else
m = m - 2 : d = d - 21
EndIf
Case 7, 8, 9
If d < 23 Then
m = m - 3 : d = d + 9
Else
m = m - 2 : d = d - 22
EndIf
Case 10
If d < 23 Then
m = 7 : d = d + 8
Else
m = 8 : d = d - 22
EndIf
Case 11, 12
If d < 22 Then
m = m - 3 : d = d + 9
Else
m = m - 2 : d = d - 21
EndIf
EndSelect
Return Trim(y) & "/" & Trim(m) & "/" & Trim(d)
EndFunction
Function ChangeToMiladi(ByVal DateParam) AsString
DateParam = Trim(DateParam)
Dim y, m, d AsInteger
y = CInt(Left(DateParam, InStr(DateParam, "/") - 1))
m = CInt(Mid(DateParam, InStr(DateParam, "/") + 1, InStrRev(DateParam, "/") - InStr(DateParam, "/") - 1))
d = CInt(Mid(DateParam, InStrRev(DateParam, "/") + 1))
If y < 1300 Then y = y + 1300


'******************* Leap year
If y = 1378 Then
If m = 12 And d = 10 Then
y = 2000 : m = 2 : d = 29 : ExitFunction
EndIf
If m = 12 And d > 10 Then
d = d - 1
EndIf
ElseIf y = 1379 Then
d = d - 1
If d = 0 Then
m = m - 1
If m > 0 And m < 7 Then d = 31
If m > 6 Then d = 30
If m = 0 Then
d = 29
m = 12
y = y - 1
EndIf
EndIf
EndIf
'*******************
If m < 10 Or (m = 10 And d < 11) Then
y = y + 621
Else
y = y + 622
EndIf
SelectCase m
Case 1
If d < 12 Then
m = 3 : d = d + 20
Else
m = 4 : d = d - 11
EndIf
Case 2
If d < 11 Then
m = 4 : d = d + 20
Else
m = 5 : d = d - 10
EndIf
Case 3
If d < 11 Then
m = 5 : d = d + 21
Else
m = 6 : d = d - 10
EndIf
Case 4
If d < 10 Then
m = 6 : d = d + 21
Else
m = 7 : d = d - 9
EndIf
Case 5, 6, 8
If d < 10 Then
m = m + 2 : d = d + 22
Else
m = m + 3 : d = d - 9
EndIf
Case 7
If d < 9 Then
m = 9 : d = d + 22
Else
m = 10 : d = d - 8
EndIf
Case 9
If d < 10 Then
m = 11 : d = d + 21
Else
m = 12 : d = d - 9
EndIf
Case 10
If d < 11 Then
m = 12 : d = d + 21
Else
m = 1 : d = d - 10
EndIf
Case 11
If d < 12 Then
m = 1 : d = d + 20
Else
m = 2 : d = d - 11
EndIf
Case 12
If d < 10 Then
m = 2 : d = d + 19
Else
m = 3 : d = d - 9
EndIf
EndSelect
ReturnCStr(DateSerial(y, m, d))
EndFunction
EndModule

Sorenaa_s
چهارشنبه 12 اردیبهشت 1386, 17:32 عصر
من واسه اینکه این مشکل برام پیش نیاد تاریخ رو تو بانک بصورت خورشیدی و رشته ای نگه میدارم ( مثلا: 13860212 ) زمان ثبت در بانک اسلش ها رو بر میدام رشته ای ثبت میکنم، زمان خوندن ازبانک دوباره اسلش ها رو می ذارم.
ضمنا اگر بانک شما SQLServer باشه، من UDF تبدیل تاریخ رو دارم، با اون میشه زمان Select زدن تبدیل تاریخ رو انجام داد. اگز لازم بود بگو که بفرستم.

linux
چهارشنبه 12 اردیبهشت 1386, 19:54 عصر
دوست عزیز من هم عرض کردم DLL اینکار رو دارم
از بابت تبدیل یک تاریخ مشکلی ندارم
مشکل من اینه که می خوام کل تاریخ هایی که توی ستون مربوطه و در یک DatagridViewzقرار دارند رو یکباره به خورشیدی تبدیل کنم
چیزی که می خواهی توی این آدس هتس http://www.h-two.info/Products/H2GBN/Default.aspx
با دقت بخونش