ورود

View Full Version : تاریخ فارسی و پردازش روی آن



EHSH
جمعه 18 شهریور 1384, 08:21 صبح
با سلام خدمت همه ی دوستان !

من 2 تا فیلد توی جدول دارم که تاریخ را بصورت 12/6/1384 در داخلشون ذخیره میشن .
نمیدونم چه جوری میشه تاریخها را با هم مقایسه کنم ؟
کدوم از اون یکی بزرگتره یا بلعکس !

از راهنمایی شما ممنونم

pegasos
شنبه 19 شهریور 1384, 08:37 صبح
سلام دوست من.
http://www.barnamenevis.org/forum/showthread.php?t=26273

به امید موفقیت.

kochol
دوشنبه 21 شهریور 1384, 12:40 عصر
سلام
این مشکل من هم بود ولی نخواستم از روش بالا استفاده کنم پس خودم تابعی برای این کار نوشتم البته من تاریخ ها مو به صورت 1384/06/07 18:16:03 ذخیره می کنم


Public Shared Function D1BD2(ByVal Date1 As String, ByVal Date2 As String) As Boolean
Dim int1, int2 As Integer
Dim c As Integer = 0

Date1 &= "\"
Date2 &= "\"
int1 = Date1.Substring(0, 4)
int2 = Date1.Substring(0, 4)
If int1 > int2 Then
Return True
Exit Function
ElseIf int1 < int2 Then
Return False
Exit Function
End If

Date1 = Date1.Remove(0, 5)
Date2 = Date2.Remove(0, 5)
For i As Integer = 0 To 4
int1 = Date1.Substring(0, 2)
int2 = Date2.Substring(0, 2)
If int1 > int2 Then
Return True
Exit Function
ElseIf int1 < int2 Then
Return False
Exit Function
End If
Date1 = Date1.Remove(0, 3)
Date2 = Date2.Remove(0, 3)
Next
Return False
End Function

H_Ghaffarian
پنج شنبه 24 شهریور 1384, 09:22 صبح
سلام
فیلد های تاریخ رو با فرمت yyyy/mm/dd و بصورت رشته های الزاماً ده کرکتری ذخیره کنید. بعد خیلی راحت می تونید این رشته ها رو با دستورات متداول مقایسه کنید.

24/06/1384 <------ 24/6/1384
24/10/1384 <------ 24/10/1384

همونطور که می بینید فرمت هر دو تاریخ بصورت 10 کرکتری درومده و حالا اگه این دوتا رو باهم مقایسه بکنید چون کرکتر 6 ام تاریخ دوم یکه ( بزرگتر از صفر در تاریخ اول) تاریخ دوم به عنوان تاریخ بزرگتر در نظر گرفته می شه. برای محاسب اختلاف دو تاریخ هم می تونی با دستورات مقایسه رشته ها این دو فیلد 10 کرکتری رو براحتی آنالیز کنید.

kochol
پنج شنبه 24 شهریور 1384, 11:55 صبح
سلام
آفرین خیلی ایده خوبی بود.
می توان اسلش را حذف کرد و به اینتجر تبدیل کرد و بعد مقایسه کرد.

kochol
پنج شنبه 24 شهریور 1384, 23:53 عصر
سلام
با توجه به توضیخات شما من کد بالا را تغییر دادم.


Public Shared Function D1BD2(ByVal Date1 As String, ByVal Date2 As String) As Boolean
Date1 = Date1.Replace("/", "")
Date2 = Date2.Replace("/", "")
Date1 = Date1.Replace(" ", "")
Date2 = Date2.Replace(" ", "")
Date1 = Date1.Replace(":", "")
Date2 = Date2.Replace(":", "")
Dim i1, i2 As Int64
i1 = Val(Date1)
i2 = Val(Date2)
If i1 > i2 Then
Return True
Else
Return False
End If
End Function

Behrouz_Rad
جمعه 25 شهریور 1384, 00:33 صبح
خارج از بحث: به جای تابع Val از Convert.ToInt32 استفاده کنید.

kochol
جمعه 25 شهریور 1384, 08:15 صبح
سلام
int32 برای عدد من کوچک هست چون هم تاریخ هست و هم ساعت و یه عدد 12 رقمی می شه اگر به نظرتون این عدد خیلی حافظه می گیره یا پردازشش کند می شه لطفا بفرمایید که به دو قسمت 6 رقمی تقسیم کنم.
در ضمن من برای این از val استفاده کردم که اگر استرینگ خلی بود مقدار صفر را برگرداند.
ممنون از توجهتون.

Behrouz_Rad
جمعه 25 شهریور 1384, 11:12 صبح
فرمودید که از تابع بالا برای مقایسه بین دو تاریخ یا ساعت استفاده می کنید!
هر چند که توابع آماده ای در دات نت بدین منظور وجود دارند....
اما در مورد تابع فوق، فکر می کنم با حذف کاراکتر اسلش از تاریخ، مقدار تاریخ به یک عدد 8 رقمی تبدیل شود نه 12 رقمی!
و همچنین در مورد ساعت نیز به یک عدد 6 رقمی تبدیل می شود!
در مورد برگرداندن مقدار صفر در صورت خالی بودن متغیر رشته ای هم میشه با دستور زیر این مشکل رو برطرف کرد:


Dim myNum As Int32
myNum = Convert.ToInt32(IIf(Date1 = String.Empty, 0, Date1))

کلا سرعت بالاتر و بهینه تر بودن تابع ToInt32 مد نظرم هست.
موفق باشید.

kochol
جمعه 25 شهریور 1384, 15:22 عصر
سلام
خیلی ممنون از شما
برای من تاریخ و ساعت پشت سر هم هستند. 8+6=14 خودم هم اشتباه کرده بودم.
پس من فکر کنم جفتشونو جدا از هم کنم بهتر باشه.