PDA

View Full Version : تاریخ شمسی



bastakboys
شنبه 25 مهر 1388, 10:37 صبح
دوستان من توسط این کد تاریخ را به شمسی تبدیل می کنم


Function MiladiToShamsi(ByVal tar As Date) As String
Dim A As Date = CDate(tar.Year & "/" & tar.Month & "/" & tar.Day)
Dim B As New System.Globalization.PersianCalendar
Return B.GetYear(A) & "/" & B.GetMonth(A) & "/" & B.GetDayOfMonth(A)

End Function

و مثلا تاریخ امروز را 1388/7/25 بر می گرداند چطوری می شه که تاریخ را به صورت زیر برگرداند
1388/07/25
اگه واقعا نمیشه با تابع کاری کرد.
پس چطوری می توانم یک استرینگ را تحلیل کنم
مثلا "1388/7/25" را بگیره و چک کنه که کارکتر بین دو " / " چیست؟

Mani_rf
شنبه 25 مهر 1388, 10:58 صبح
سلام دوست عزیز. خود این تابع این کار را انجام نمی دهد. برای اینجام این کار همانطور که خودت گفتی باید رشته را تفکیک کنی. برای تفکیک رشته می توانی از تابع MID استفاده کنی ،این تابع از کاراکتری که آن را با اندیسش مشخص می کنید (شروع) به تعدادی که مشخص می کنید (تعداد) از رشته جدا کرده و باز می گرداند. بدین صورت :

Mid (رشته , شروع , تعداد)

مثال :

Mid(Date,4,1)

bastakboys
شنبه 25 مهر 1388, 11:25 صبح
میشه بیشتر توضیح بدید
مثلا اگه من بخواهم رشته "1388/7/25"در قسمت ماه که بین دو / واقع شده را چک کنم که دورقمی است یا نه
چطوری چک کنم
و اگه یک رقمی بود اون را با اضافه کردن یک صفر به ابتدای اون دو رقمی کنم

viper2009
شنبه 25 مهر 1388, 13:44 عصر
چرا از DLL های آماده استفاده نمی کنی؟
تا دلت بخواد تو تالار نمونه هاش هست
یکشم خودم گذاشتم

بنام Persia
جستجوکن

saadi2
شنبه 25 مهر 1388, 14:14 عصر
بفرمایید :



Public Function ToDay() As String
Try
Dim [Date] As New System.Globalization.PersianCalendar
Return [Date].GetYear(Date.Now) & "/" _
& Format([Date].GetMonth(Date.Now), "00") & "/" _
& Format([Date].GetDayOfMonth(Date.Now), "00")
Catch ex As Exception
Return ""
End Try
End Function


منبع : استاد AnooshIran

Navid Asadi
شنبه 25 مهر 1388, 14:24 عصر
دوست عزیز خودت رو با mid و left و right درگیر نکن ...
هیچ چیز هم بهتر از کار خود آدم نیست...
من از midاستفاده میکردم تا زمانی که کدی رو تو سایت پیدا کردم و کامل شدش رو اینجا میزارم...



Public Function EslahTarikh(ByVal Tarikh As String) As String
EslahTarikh = ""
Dim TarikhArry = Split(Tarikh, "/")
TarikhArry(0) = Strings.Trim(TarikhArry(0).ToString)
If TarikhArry(0) <> "" Then
If TarikhArry(0).ToString.Length <> 4 Then
MsgBox(".سال را درس وارد نمایید")
Else
If TarikhArry(0) > 1450 Then TarikhArry(0) = 1450
If TarikhArry(0) < 1300 Then TarikhArry(0) = 1300

TarikhArry(1) = Strings.Trim(TarikhArry(1).ToString)
If TarikhArry(1) <> "" Then
If TarikhArry(1) > 12 Then TarikhArry(1) = 12
If TarikhArry(1) < 1 Then TarikhArry(1) = 1
If TarikhArry(1).ToString.Length < 2 Then TarikhArry(1) = "0" & TarikhArry(1)

TarikhArry(2) = Strings.Trim(TarikhArry(2).ToString)
If TarikhArry(2) <> "" Then
If TarikhArry(2) > 31 Then TarikhArry(2) = 31
If TarikhArry(2) < 1 Then TarikhArry(2) = 1

If TarikhArry(2).ToString.Length < 2 Then TarikhArry(2) = "0" & TarikhArry(2)
End If
End If
EslahTarikh = TarikhArry(0) & TarikhArry(1) & TarikhArry(2)
End If
End If
End Function

Navid Asadi
شنبه 25 مهر 1388, 14:27 عصر
البته من کد رو عجله ای گذاشتم و بهینش نکردم...
خیلی از خط هاش رو میشه به عبارتی دوتا یکی کرد...

bastakboys
شنبه 25 مهر 1388, 17:28 عصر
ببخشید دوستان ار همتون ممنونم
روش همه درست بود اما فکر کنم روش پایین که تازه پیدا کردم بهتر باشه
میزارم تا بقیه استفاده کنن


Function MiladiToShamsi(ByVal Year AsInteger, ByVal Month AsInteger, ByVal Day AsInteger) AsString
Dim A AsDate = Year.ToString & "/" & Month.ToString & "/" & Day.ToString
Dim B AsNew PersianCalendar

Dim D AsString=B.GetDayOfMonth(A).ToString
Dim M AsString= B.GetMonth(A).ToString

If D.Length = 1 Then
D= "0" + D
EndIf
If M.Length = 1 Then
M= "0" + M
EndIf
Return B.GetYear(A) & "/" & M & "/" & D
EndFunction

bastakboys
شنبه 25 مهر 1388, 17:33 عصر
راستی من تاریخم را به توصیه یکی از دوستان در بانک بصورت text ذخیره می کنم
برای اینکه بین دو تاریخ را چک کنم مشکلی ندارم
اما وقتی می خواهم مثلا رکورد های هفته گذشته (یعنی بین امروز و هفت روز قبل) را بدست بیارم با مشکل مواجه می شم
شما پیشنهادی ندارید؟

Navid Asadi
شنبه 25 مهر 1388, 17:45 عصر
مثلا برای سرچ تاریخ در ما 8 باید از like و به صورت زیر استفاده کنید:

select * from TABLE where Date like '%138808%'

Mani_rf
شنبه 25 مهر 1388, 18:05 عصر
بهترین روش برای ذخیره تاریخ ذخیره آن به صورت میلادی در دیتابیس است . در صورتی که تاریخ را در دیتا بیس Text ذخیره نمایید در هنگام مقایسه و بدست آوردن دوره ای میان دو تاریخ به مشکل بر خواهید خورد.تاریخ را میلادی ذخیره نمایید و هنگام فراخوانی و نمایش آن را به شمسی تبدیل نمایید.

Navid Asadi
شنبه 25 مهر 1388, 19:14 عصر
البت میتونی اون رو به صورت یه عدد 8 رقمی ذخیره کنی اون وقت همه کار میشه باهاش کرد....

bastakboys
شنبه 25 مهر 1388, 19:25 عصر
من به این صورت ثبت می کنم: 0000/00/00
وقتی به این صورت باشه می تونی کارهایی که با تاریخ انجام می دی را با این انجام بدی
مثلا برای بین دو تاریخ:


SELECT [Order].*
FROM [Order]
WHERE ([Date] <= ?) AND ([Date] >= ?)

majid_vb_2008
شنبه 25 مهر 1388, 19:38 عصر
دوسته من اول تاريخ رو بصورت 8 رقمي
بعد نوع فيلدي كه تاريخ رو توي اون ذخيره مي كني بايد nvarchar(10
بهدش با كد SQL زير بين دوتا تاريخ رو ميتوني جستجو كني


strsql = "Select * From Sandogh Where Tarekh BETWEEN '" & Text1.Text & "' AND '" & Text2.Text & "'"

bastakboys
شنبه 25 مهر 1388, 19:52 عصر
دوستان همون طور که گفتم مشکل من بین دو تاریخ نیست مشکل اینجاست که من می خواهم این امکان را برای کاربر بگذارم که مثلا وارد کنه که رکورد های چند روز پیش را می خواهد(1و2و5و7و20و...)
من می خواهم بدانم چطوری میتونم تاریخ دوم را که از تاریخ امروز منهای مقدار روز وارد شده است بدست بیاورم

Hossis
شنبه 25 مهر 1388, 20:23 عصر
دوستان همون طور که گفتم مشکل من بین دو تاریخ نیست مشکل اینجاست که من می خواهم این امکان را برای کاربر بگذارم که مثلا وارد کنه که رکورد های چند روز پیش را می خواهد(1و2و5و7و20و...)
من می خواهم بدانم چطوری میتونم تاریخ دوم را که از تاریخ امروز منهای مقدار روز وارد شده است بدست بیاورم
این که کاری نداره، اول دو تا متن فراخوانی شده از بانک رو به تاریخ تبدیل می کنید و سپس او دو رو با هم مقایسه می نمایید.

bastakboys
یک شنبه 26 مهر 1388, 06:32 صبح
این که کاری نداره، اول دو تا متن فراخوانی شده از بانک رو به تاریخ تبدیل می کنید و سپس او دو رو با هم مقایسه می نمایید.
دوست عزیز من متوجه نشدم
میشه یک مثال بزنید.

nima898
یک شنبه 03 آبان 1388, 15:47 عصر
دوستان همون طور که گفتم مشکل من بین دو تاریخ نیست مشکل اینجاست که من می خواهم این امکان را برای کاربر بگذارم که مثلا وارد کنه که رکورد های چند روز پیش را می خواهد(1و2و5و7و20و...)
من می خواهم بدانم چطوری میتونم تاریخ دوم را که از تاریخ امروز منهای مقدار روز وارد شده است بدست بیاورم

شما اول متن فراخوانی شده از بانک رو تبدیل به تاریخ کنید و عدد مورد نظر رو ازش کم کنید و تاریخ بدست اومده رو به تکست تبدیل کنید بعد تو بانک جستجو کنید

f.nabavi
یک شنبه 03 آبان 1388, 16:37 عصر
سلام.
فرض کن میخوای 7 روز از تاریخ x که در دیتابیس ذخیره کرده بودی به عقب برگردی. تاریخ خونده شده از دیتابیس رو داخل یه متغیر از نوع datetime بریز. بعد با کمک کدی شبیه زیر هر چند روز که میخوای ازش کم کن یا اضافه کن:

dim a as datetime
a = 'Your date from DB
a.addday(-7)'