PDA

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



Inprise
سه شنبه 08 خرداد 1386, 08:27 صبح
این بخش محل جمع آوری کدها ، کلاسها و کامپوننتهائی است که به نحوی در فرآیند مبادله و تبدیل و ترجمه از-به تاریخ شمسی مربوط هستند . اگر چنین کدی نوشته اید و مایلید در اختیار بقیه بگذارید همراه با توضیحات لازم در این بخش ضمیمه کنید . کدتان باید حاوی :
توابع ، کلاسها و-یا کامپوننت هائی برای انواع مبادلات و تبدیلهای تاریخی که از تاریخ شمسی حمایت میکنند ( سورس کد ، و نه فایل باینری مانند DLL و اکتیواکس و ... )
حداقل یک برنامه نمایشی که از آن استفاده میکند ( سورس کد ، و نه فایل باینری اجرائی )
و ترجیحا" یک مستند هر چند کوتاه فارسی در مورد نحوهء عملکرد و الگوریتم تبدیل مورد استفاده و ...باشد . زبان و محیط و کامپایلر و حتی الگوریتم ها و روتینهای مورد استفاده مطرح نیستند و از هر کدی مربوط به هر محیط و سیستم عامل و کامپایلری استقبال میشود . تلاش میکنیم وقتی آرشیو مناسبی تهیه شد همه آنها را در قالب یک بستهء شکیل تحت لیسانس سایت برنامه نویس به همراه نام و مشخصات برنامه نویسان آنها به شکل مناسبی منتشر کنیم . (احتمالا یک Homepage هم در سایت برنامه نویس برای نگهداری از آن در نظر گرفته شود ) این کمک میکند که مسئله تاریخ شمسی یکبار بصورت متجمع و یکپارچه برطرف شود و این بسته به مرجعی برای برنامه نویسان فارسی زبان تبدیل شود . افرادی که همکاری مناسب و فعالی داشته باشند مدال همکاری سایت برنامه نویس را هم دریافت میکنند .

Inprise
سه شنبه 08 خرداد 1386, 08:52 صبح
این لیستی از کدهائی است که به نظر من میرسد باید در چنین بسته ای وجود داشته باشند :

C : قابل استفاده در کلیه محیطها / کامپایلرهای سی
++C : ایضا
Activex-COM Library : ویژوال بیسیک ؛ VC
VCL : دلفی و سی++ بیلدر
QT : برای محیطها و کامپایلرهای سازگار
Java Class
Python Library
Ruby Module
کامپوننت دات نت : برای زبانهای سازگار ( حمایت از مونو ؟ )
PHP Library : ترجیحا" Class ( سازگاری با VCL for PHP ؟ )
جاوا اسکریپت - وی بی اسکریپت : صفحات وبدر صورت لزوم پیشنهاد بدهید تا این لیست تکمیل شود و اگر قبلا در مورد هر کدام کاری انجام شده است معرفی کنید . این تاپیک بعدا" به بخش Open Source منتقل میشود

sokoot
سه شنبه 08 خرداد 1386, 09:50 صبح
پیشنهاد می کنم که دوستان ضمن ارائه سورس کد، نمونه اجرایی و مستند فارسی، مجوز (License) استفاده از سورس رو هم اعلام کنند.
ضمنا ظاهرا Perl فراموش شده است.

sh
سه شنبه 08 خرداد 1386, 15:35 عصر
کاش در مورد مشکلات دیگر زبان فارسی نظیر تبدیل کد پیج داس به ویندوز یا برعکس و دیگر مشکلات هم مطالبی عنوان بشه

titbasoft
سه شنبه 08 خرداد 1386, 16:18 عصر
کد به زبان Visual Basic .Net

این کد مربوط به یک ماژول از یک سیستم Medium Size هستش. کد اصلی کمی مفصل تر از این کد هست و سعی کردم کمی از شاخ و برگ هاش بزنم تا قابل فهم تر باشه. به هر حال این کد حدود 2 ساله که داره روی وب استفاده میشه و مشکلی نداشته. از الگوریتم میلادی به شمسی اون هم مدت 4 ساله که روی یک سیستم کنترل پروژه داره استفاده میشه که از اون هم هنوز مشکلی گزارش نشده

برای توضیح عرض کنم که با استفاده از از این کد می تونید :
1) تاریخ های میلادی، شمسی و فمری رو به هم تبدیل کنید. با استفاده از متدهای XToY
2) تعداد روزهای یک ماه رو بدست بیارید GetDaysInMonthX

به هر حال چون این کد برای استفاده خاص خصوصی سازی شده ممکنه کمی گنگ باشه اما به هر حال اگر سوالی بود مطرح کنید و من هم سعی می کنم با ویرایش کردن همین پست (برای شلوغ نشدن تاپیک) سوالات رو جواب بدم.


Imports System.Globalization
Public Class XDate
Private mvarDay As Int16
Private mvarMonth As Int16
Private mvarYear As Int32

Function SetDate(ByVal year As Int32, ByVal month As Int16, ByVal day As Int16) As XDate
mvarYear = year
mvarMonth = month
mvarDay = day
Return Me
End Function

Function SetMonth(ByVal month As Int16) As XDate
mvarMonth = month
Return Me
End Function
Property Day() As Int16
Get
Return mvarDay
End Get
Set(ByVal Value As Int16)
mvarDay = Value
End Set
End Property

Property Month() As Int16
Get
Return mvarMonth
End Get
Set(ByVal Value As Int16)
mvarMonth = Value
End Set
End Property

Property Year() As Int32
Get
Return mvarYear
End Get
Set(ByVal Value As Int32)
mvarYear = Value
End Set
End Property

#Region "DaysInMonth"
Function GetDaysInMothJalali() As Int16
Dim r As Int16
If Me.Month < 12 Then r = 30
If Me.Month < 7 Then r = 31
If Me.Month = 12 Then
If (Me.Year - 1303) Mod 4 = 0 Then
r = 30
Else
r = 29
End If
End If
Return r
End Function

Function GetDaysInMothGregorian() As Int16
Return Date.DaysInMonth(Me.Year, Me.Month)
End Function

Function GetDaysInMothHijri() As Int16
Dim ghCal As New HijriCalendar
ghCal.HijriAdjustment = -1

Return ghCal.GetDaysInMonth(Me.Year, Me.Month)
End Function
#End Region

#Region "Converts"
Function GregorianToHijri() As XDate
Dim ghCal As New HijriCalendar
ghCal.HijriAdjustment = -1
Dim cd As New DateTime(Me.Year, Me.Month, Me.Day)
Dim r As New XDate
r.Day = ghCal.GetDayOfMonth(cd)
r.Month = ghCal.GetMonth(cd)
r.Year = ghCal.GetYear(cd)
Return r
End Function

Function HijriToGregorian() As XDate
Dim myCal As New HijriCalendar
myCal.HijriAdjustment = -1
Dim myDT As New DateTime(Me.Year, Me.Month, Me.Day, myCal)
Dim r As New XDate(myDT.Year, myDT.Month, myDT.Day)
Return r
End Function

Function HijriToJalali() As XDate
Return Me.HijriToGregorian.GregorianToJalali
End Function

Function JalaliToHijri() As XDate
Return Me.JalaliToGregorian.GregorianToHijri
End Function

Function GregorianToJalali() As XDate
Dim MDayMonth(12) As Int16, SDayMonth(12) As Int16
Dim MYear As Int32, MMonth As Int16, MDay As Int16
Dim gYear As Int32, gMonth As Int16, gDay As Int16
Dim SYear As Int32, SMonth As Int16, SDay As Int16
Dim YearBuf, MonthBuf, DayBuf
Dim MDate, SDate
Dim DayCount, Deference
Dim i
Dim StrDate As String = Me.Year & "/" & Me.Month & "/" & Me.Day
Dim GetShamsiDate As String
Dim Result As String

Deference = 79
DayCount = 0
SMonth = 1
YearBuf = ""
MonthBuf = ""
DayBuf = ""

For i = 1 To 6
SDayMonth(i) = 31
Next
For i = 7 To 11
SDayMonth(i) = 30
Next
SDayMonth(12) = 29

MDayMonth(1) = 31
MDayMonth(2) = 28
MDayMonth(3) = 31
MDayMonth(4) = 30
MDayMonth(5) = 31
MDayMonth(6) = 30
MDayMonth(7) = 31
MDayMonth(8) = 31
MDayMonth(9) = 30
MDayMonth(10) = 31
MDayMonth(11) = 30
MDayMonth(12) = 31


StrDate = Left(StrDate, 10)
MDate = CDate(StrDate)
MYear = DatePart("YYYY", MDate)
MMonth = DatePart("m", MDate)
MDay = DatePart("d", MDate)

gYear = MYear
gMonth = MMonth
gDay = MDay

If Math.Abs(MYear - 1996) Mod 4 = 0 And MMonth > 2 Then MDay = MDay + 1
If Math.Abs(MYear - 1997) Mod 4 = 0 And MMonth < 4 Then
If MMonth < 3 Then
MDay = MDay + 1
Else
If MDay < 20 Then MDay = MDay + 1
End If
End If
DayCount = MDay

Do While MMonth > 0
MMonth = MMonth - 1
If (MMonth = 0) And (DayCount < Deference) Then
MMonth = 12
MYear = MYear - 1
End If
If MMonth > 0 Then DayCount = DayCount + MDayMonth(MMonth)
Loop

DayCount = DayCount - Deference
Do While (SMonth < 12) And (DayCount > SDayMonth(SMonth))
DayCount = DayCount - SDayMonth(SMonth)
SMonth = SMonth + 1
Loop
SDay = DayCount
SYear = MYear - 621
If SDay = "0" And SMonth = 1 Then
SDay = "30"
SMonth = "12"
SYear = SYear - 1
End If
If SDay < 10 Then DayBuf = "0"
If SMonth < 10 Then MonthBuf = "0"

If Math.Abs(gYear - 1995) Mod 4 = 0 And gMonth = 3 And gDay = 20 Then
Result = Trim(gYear - 622) & ".12.29"
GetShamsiDate = Trim(Result)
ElseIf Math.Abs(gYear - 1997) Mod 4 = 0 And gMonth = 3 And gDay = 19 Then
Result = Trim(gYear - 622) & ".12.29"
GetShamsiDate = Trim(Result)
ElseIf Math.Abs(gYear - 1996) Mod 4 = 0 And gMonth = 3 And gDay = 19 Then
Result = Trim(gYear - 622) & ".12.29"
GetShamsiDate = Trim(Result)
ElseIf Math.Abs(gYear - 1998) Mod 4 = 0 And gMonth = 3 And gDay = 20 Then
Result = Trim(gYear - 622) & ".12.29"
GetShamsiDate = Trim(Result)
Else
Result = CStr(SYear) + "." + MonthBuf + CStr(SMonth) + "." + DayBuf + CStr(SDay)
GetShamsiDate = Trim(Result)
End If
Dim d As New XDate
Dim dd() As String = GetShamsiDate.Split(".")
d.Day = dd(2)
d.Month = dd(1)
d.Year = dd(0)
Return d
End Function

Function JalaliToGregorian() As XDate
Dim iyear As Int32 = Me.Year
Dim imonth As Int16 = Me.Month
Dim iday As Int16 = Me.Day
Dim epbase As Int64, epyear As Int64, mdays As Int16, jdn As Int64
Dim l As Int64, k As Int64, n As Int64, ii As Int64, j As Int64

If iyear >= 0 Then
epbase = iyear - 474
Else
epbase = iyear - 473
End If

epyear = 474 + (epbase Mod 2820)
If imonth <= 7 Then
mdays = (CLng(imonth) - 1) * 31
Else
mdays = (CLng(imonth) - 1) * 30 + 6
End If
jdn = CLng(iday) + mdays + Fix(((epyear * 682) - 110) / 2816) _
+ (epyear - 1) * 365 _
+ Fix(epbase / 2820) * 1029983 _
+ (1948321 - 1)

l = 0 : k = 0 : n = 0 : ii = 0 : j = 0

If (jdn > 2299160) Then
l = jdn + 68569
n = ((4 * l) \ 146097)
l = l - ((146097 * n + 3) \ 4)
ii = ((4000 * (l + 1)) \ 1461001)
l = l - ((1461 * ii) \ 4) + 31
j = ((80 * l) \ 2447)
iday = l - ((2447 * j) \ 80)
l = (j \ 11)
imonth = j + 2 - 12 * l
iyear = 100 * (n - 49) + ii + l
Else
l = 0 : k = 0 : n = 0 : ii = 0 : j = 0
j = jdn + 1402
k = ((j - 1) \ 1461)
l = j - 1461 * k
n = ((l - 1) \ 365) - (l \ 1461)
ii = l - 365 * n + 30
j = ((80 * ii) \ 2447)
iday = ii - ((2447 * j) \ 80)
ii = (j \ 11)
imonth = j + 2 - 12 * ii
iyear = 4 * k + n + ii - 4716
End If
Dim d As New XDate
d.Year = iyear
d.Month = imonth
d.Day = iday
Return (d)
End Function
#End Region


Public Sub New()

End Sub
Public Sub New(ByVal year As Int64, ByVal month As Int16, ByVal day As Int16)
Me.Year = year
Me.Month = month
Me.Day = day
End Sub

End Class
طرز استفاده:

Dim dtToday As New XDate(Now.Year, Now.Month, Now.Day)
txtGregorian.Text = dtToday.Day & "/" & dtToday.Month & "/" & dtToday.Year
txtGregorianDays.Text = dtToday.GetDaysInMothGregorian

dtToday = dtToday.GregorianToJalali
txtJalali.Text = dtToday.Day & "/" & dtToday.Month & "/" & dtToday.Year
txtJalaliDays.Text = dtToday.GetDaysInMothJalali

dtToday = dtToday.JalaliToHijri
txtHijri.Text = dtToday.Day & "/" & dtToday.Month & "/" & dtToday.Year
txtHijriDays.Text = dtToday.GetDaysInMothHijri
* به طور کلی هر نمونه از شئ XDate می تونه یک تاریخ رو (به صورت روز در پراپرتی Day ، ماه در پراپرتی Month و سال در پراپرتی Year) ذخیره کنه. که البته کنترلی روی بازه تاریخ هم نداره. ضمنا شما نمی تونید تشخیص بدید که تاریخی که الان در یک نمونه نگهداری شده از کدام نوع هست.

* دقت کنید که این شما هستید که باید بدونید در حال حاضر کدام نوع تاریخ (میلادی، شمسی یا قمری) در آبجکت شما ذخیره شده. سپس می تونید با توجه به اینکه مثلا نوع جاری X است و می خواهیم به نوع Y تبدیلش کنیم ار متد های XToY استفاده کنید. این متد ها هم مجددا یک نمونه از شئ XDate برمی گردونند که حاوی تاریخ تبدیل شده است

See Also:
HijriAdjustment (http://msdn2.microsoft.com/en-us/library/system.globalization.hijricalendar.hijriadjustment %28VS.71%29.aspx)

tabib_m
سه شنبه 08 خرداد 1386, 17:33 عصر
سلام.
استاد یک کد معروف بین برنامه نویسهای php هست و استفاده میشه که توسط آقای میلاد راستیان (http://forum.majidonline.com/member.php?u=612) نوشته شده که فکر نمیکنم توی این سایت عضو باشن. ایشون توی سایت مجیدآنلاین (http://www.majidonline.com) فعالیت دارن. ولی در کل کدشون در حدی کامل هست که من دلم نیومد اینجا مطرح نکنم.
اگر اجازه هست من حداقل لینک صفحه ای که در موردش توضیح دادن رو اینجا بذارم.
اگر هم نه ، خوب میتونید مطلب من رو پاک کنید.
با تشکر

موفق باشید.

titbasoft
چهارشنبه 09 خرداد 1386, 10:33 صبح
لطفا SQL رو هم اضافه کنید

titbasoft
چهارشنبه 09 خرداد 1386, 10:51 صبح
مطالب زیر از تاپیک های همین انجمن استخراج شده اند:

جاوا: PERSIANCALENDAR (http://sourceforge.net/projects/persiancalendar/)
سی شارپ: Jalali Calendar (http://www.codeproject.com/csharp/JalaliCalendar.asp) یک تاپیک سایت (http://www.barnamenevis.org/forum/showthread.php?t=1575)
زبان TSQL: تابع تبدیل تاریخی شمسی و میلادی (http://www.sayan.ir/ViewArticle.aspx?ArticleID=195)
دات نت: ابزارهای تبدیل تاریخ برای دات نت (http://www.barnamenevis.org/forum/showthread.php?t=28289)
فاکس: کد (http://www.barnamenevis.org/forum/showthread.php?t=7624) یا Component (http://www.developercenter.ir/Forum/showthread.php?t=201)
دلفی: ShDate Solutions (http://www.farsicomponents.com/fshdatesolutions.htm) یک تاپیک سایت (http://www.barnamenevis.org/forum/showthread.php?t=36005)
وی بی دات نت: تاپیک سایت (http://www.barnamenevis.org/forum/showthread.php?t=61194)
ای اس پی دات نت (ASP.Net) : یک تاپیک سایت (http://www.barnamenevis.org/forum/showthread.php?t=27817)
دات نت 2: یک تاپیک از سایت (http://www.barnamenevis.org/forum/showthread.php?t=52251) یک تاپیک از سایت (II) (http://www.barnamenevis.org/forum/showthread.php?t=57636)
گروهی: PHP, ANSI C, JAVA Scrip, C#, TeX (http://www.farsiweb.ir/wiki/Iranian_Calendar)



مجددا TSQL:

CREATE function DLE(@EDate nvarchar(10)) --( @FDate Char(10) output)
returns char(10)
AS
begin
--Declare @EDate DateTime

Declare @EYear int, @EMon smallint, @EDay smallint, @ELeap bit,
@EMonArray Char(12), @EDayOfYear int
Declare @FYear int, @FMon smallint, @FDay smallint, @FLeap bit,
@FMonArray Char(12)
Select @FMonArray= Char(31)+Char(31)+Char(31)+Char(31)+Char(31)+Char(
31)+Char(30)+Char(30)+Char(30)+Char(30)+Char(30)+C har(29)
Select @EMonArray= Char(31)+Char(28)+Char(31)+Char(30)+Char(31)+Char(
30)+Char(31)+Char(31)+Char(30)+Char(31)+Char(30)+C har(31)
--set @EDate = Getdate()
Select @EYear= Year(@EDate)
Select @EMon= Month(@EDate)
Select @EDay= Day(@EDate)
if (@EYear %4)=0 Select @ELeap=1 else Select @ELeap=0
--------------------- Calc Day Of Year
Declare @Temp int, @Cnt int
Select @Cnt=@EMon-1
Select @Temp=0
While @Cnt<>0 begin
if (@Cnt=2)and(@ELeap=1) Select @Temp= @Temp+29
else Select @Temp= @Temp + Ascii(Substring(@EMonArray, @Cnt, 1))
Select @Cnt=@Cnt-1
end
Select @EDayOfYear= @Temp+@EDay
---------------------- Convert to Farsi
Select @Temp= @EDayOfYear-79
if @Temp>0 Select @FYear= @EYear-621
else begin
Select @FYear= @EYear-622
if ((@FYear %4)=3) Select @Temp= @Temp+366 else Select @Temp= @Temp+365
end
if (@FYear %4)=3 Select @FLeap=1 else Select @Fleap=0
Select @Cnt= 1
While (@Temp<>0) and (@Temp>Ascii(Substring(@FMonArray, @Cnt, 1)))
begin
if @Cnt=12
if (@FLeap=1) Select @Temp=@Temp-30 else Select @Temp= @Temp-29
else Select @Temp= @Temp-Ascii(Substring(@FMonArray, @Cnt, 1))
Select @Cnt= @Cnt+1
end
if @Temp<>0 begin
Select @FMon= @Cnt
Select @FDay= @Temp
end else begin
Select @FMon= 12
Select @FDay=30
end
------------------ Create Output
Declare @YStr Char(4), @MStr char(2), @DStr Char(2)
select @YStr= Convert(Char, @FYear)
if @FMon<10 Select @MStr='0'+Convert(Char,@FMon) else Select
@MStr=Convert(Char, @FMon)
if @FDay<10 Select @DStr='0'+Convert(Char,@FDay) else Select
@DStr=Convert(Char, @FDay)
--Select @FDate= @YStr+'/'+@MStr+'/'+@dStr
return @YStr+'/'+@MStr+'/'+@dStr
end


-------------------------------------------------------------------------------------

CREATE function DLF(@EDate DateTime) --( @FDate Char(10) output)
returns char(10)
AS
begin
--Declare @EDate DateTime
if @edate=''
return ''
else
Declare @EYear int, @EMon smallint, @EDay smallint, @ELeap bit,
@EMonArray Char(12), @EDayOfYear int
Declare @FYear int, @FMon smallint, @FDay smallint, @FLeap bit,
@FMonArray Char(12),@TempReturn char(10)
Select @FMonArray= Char(31)+Char(31)+Char(31)+Char(31)+Char(31)+Char(
31)+Char(30)+Char(30)+Char(30)+Char(30)+Char(30)+C har(29)
Select @EMonArray= Char(31)+Char(28)+Char(31)+Char(30)+Char(31)+Char(
30)+Char(31)+Char(31)+Char(30)+Char(31)+Char(30)+C har(31)
--set @EDate = Getdate()
SET @TempReturn =''
if cast(@edate as char(10))='' or cast(@edate as char(10))=null
return @tempreturn
else
Select @EYear= Year(@EDate)
Select @EMon= Month(@EDate)
Select @EDay= Day(@EDate)
if (@EYear %4)=0 Select @ELeap=1 else Select @ELeap=0
--------------------- Calc Day Of Year
Declare @Temp int, @Cnt int
Select @Cnt=@EMon-1
Select @Temp=0
While @Cnt<>0 begin
if (@Cnt=2)and(@ELeap=1) Select @Temp= @Temp+29
else Select @Temp= @Temp + Ascii(Substring(@EMonArray, @Cnt, 1))
Select @Cnt=@Cnt-1
end
Select @EDayOfYear= @Temp+@EDay
---------------------- Convert to Farsi
Select @Temp= @EDayOfYear-79
if @Temp>0 Select @FYear= @EYear-621
else begin
Select @FYear= @EYear-622
if ((@FYear %4)=3) Select @Temp= @Temp+366 else Select @Temp= @Temp+365
end
if (@FYear %4)=3 Select @FLeap=1 else Select @Fleap=0
Select @Cnt= 1
While (@Temp<>0) and (@Temp>Ascii(Substring(@FMonArray, @Cnt, 1)))
begin
if @Cnt=12
if (@FLeap=1) Select @Temp=@Temp-30 else Select @Temp= @Temp-29
else Select @Temp= @Temp-Ascii(Substring(@FMonArray, @Cnt, 1))
Select @Cnt= @Cnt+1
end
if @Temp<>0 begin
Select @FMon= @Cnt
Select @FDay= @Temp
end else begin
Select @FMon= 12
Select @FDay=30
end
------------------ Create Output
Declare @YStr Char(4), @MStr char(2), @DStr Char(2)
select @YStr= Convert(Char, @FYear)
if @FMon<10 Select @MStr='0'+Convert(Char,@FMon) else Select
@MStr=Convert(Char, @FMon)
if @FDay<10 Select @DStr='0'+Convert(Char,@FDay) else Select
@DStr=Convert(Char, @FDay)
--Select @FDate= @YStr+'/'+@MStr+'/'+@dStr
return @YStr+'/'+@MStr+'/'+@dStr
end






ASP کلاسیک:

<%
FMonArray= array (0,31,31,31,31,31,31,30,30,30,30,30,30)
EMonArray= Array(0,31, 28,31,30,31,30,31,31,30,31,30,31)

W = Array ("یک‌شنبه", "دوشنبه", "سه‌شنبه", "چهار‌شنبه", "پنج‌شنبه", "جمعه", "شنبه")
Mon = Array ("فروردین", "اردیبهشت", "خرداد", "تیر", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند")
EYear= Year(Date)
EMon= Month(Date)
EDay = Day(Date)

ELeap=0

if ((EYear mod 4))= 0 Then
ELeap =1
End if

Cnt=EMon-1
Temp=0
While Cnt<>0
if ((Cnt=2)and(ELeap=1)) Then
Temp= Temp+29
else
Temp= Temp + EMonArray(Cnt)
end if
Cnt=Cnt-1
Wend

EDayOfYear= Temp+EDay
' Convert to Farsi

Temp= EDayOfYear-79
if Temp>0 Then
FYear= EYear-621
else
FYear= EYear-622

if ((FYear mod 4)=3) then
Temp= Temp+366
else
Temp= Temp+365
End if
End if

if (FYear mod 4)=3 Then
FLeap=1
else
Fleap=0
End if

Cnt= 1

While( (Temp<>0) and (Temp>FMonArray(Cnt)) )
if Cnt=12 Then
if (FLeap=1) Then
Temp=Temp-30
else Temp= Temp-29
end if
else Temp= Temp-FMonArray(Cnt)
end if

Cnt= Cnt+1
Wend

if Temp<>0 Then
FMon = Cnt
FDay= Temp
else
FMon= 12
FDay=30
End if

DateShamsi = W(WeekDay(Date) - 1) & " " & FDay& " " & Mon(FMon - 1) & " " &FYear
%>
<%
response.write(DateShamsi)
%>

oxygenws
چهارشنبه 09 خرداد 1386, 15:17 عصر
سلام.
استاد یک کد معروف بین برنامه نویسهای php هست و استفاده میشه که توسط آقای میلاد راستیان (http://forum.majidonline.com/member.php?u=612) نوشته شده که فکر نمیکنم توی این سایت عضو باشن. ایشون توی سایت مجیدآنلاین (http://www.majidonline.com/) فعالیت دارن. ولی در کل کدشون در حدی کامل هست که من دلم نیومد اینجا مطرح نکنم.
اگر اجازه هست من حداقل لینک صفحه ای که در موردش توضیح دادن رو اینجا بذارم.
اگر هم نه ، خوب میتونید مطلب من رو پاک کنید.
با تشکر

موفق باشید.
میلاد اینجا هم عضو هست...
البته کد ایشون مقداری باگ داره و اصلا پرفورمنس خوبی نداره. (ضمن اینکه کد farsiweb.info هم پرفورمنسش خوب نیست!)

nasr
پنج شنبه 10 خرداد 1386, 09:36 صبح
من از این کد در دلفی استفاده می کنم



function shamsi(const a: string): string;
var
y, m, d: integer;
ys, ms, ds: string;
begin
{ m := strtoint((copy(a,0,2)));//05/09/07 2007/05/09
d := strtoint((copy(a,4,2)));
y := strtoint((copy(a,7,2)));y := 2000 + y;}

m := strtoint((copy(a, 6, 2))); //05/09/07 2007/05/09
d := strtoint((copy(a, 9, 2)));
y := strtoint((copy(a, 3, 2))); y := 2000 + y;
if ((M < 3) or ((M = 3) and (D < 21))) then
Y := Y - 622
else
Y := Y - 621;

case M of
1:
if (D < 21) then begin
M := 10; D := D + 10;
end
else begin
M := 11; D := D - 20;
end;
2:
if (D < 20) then begin
M := 11; D := D + 11;
end
else begin
M := 12; D := D - 19;
end;
3:
if (D < 21) then begin
M := 12; D := D + 9;
end
else begin
M := 1; D := D - 20;
end;
4:
if (D < 21) then begin
M := 1; D := D + 11;
end
else begin
M := 2; D := D - 20;
end;
5, 6:
if (D < 22) then begin
M := M - 3; D := D + 10;
end
else begin
M := M - 2; D := D - 21;
end;
7, 8, 9:
if (D < 23) then begin
M := M - 3; D := D + 9;
end
else begin
M := M - 2; D := D - 22;
end;
10:
if (D < 23) then begin
M := 7; D := D + 8;
end
else begin
M := 8; D := D - 22;
end;
11, 12:
if (D < 22) then begin
M := M - 3; D := D + 9;
end
else begin
M := M - 2; D := D - 21;
end;
end;

if d < 10 then ds := '0' + inttostr(d)
else
ds := inttostr(d);
if m < 10 then ms := '0' + inttostr(m)
else
ms := inttostr(m);
ys := inttostr(y); ys := copy(ys, 3, 2);

result := ys + '/' + ms + '/' + ds;
end;


روش استفاده



procedure TFormInfoAlum.FormShow(Sender: TObject);
begin
MaskEdit1.Text := shamsi(DateToStr(Date));
end;

m-khorsandi
پنج شنبه 10 خرداد 1386, 12:15 عصر
کامپوننت برای دلفی

این بسته شامل : سورس کد، برنامه‌ی نمایشی و فایل توضیحات هست.

این هم تصویر یکی از کامپوننت‌ها در زمان اجرا :


http://img.majidonline.com/pic/91763/Image_01.jpg

sallover28
جمعه 11 خرداد 1386, 22:07 عصر
تبدیل تاریخ در سی شارپ چگونه است؟

Inprise
شنبه 12 خرداد 1386, 16:03 عصر
لطفا با استفاده از کدهای مختلفی که در همین سایت یا سایتهای دیگر وجود دارد یا کدهائی که خودتان نوشته اید مطابق اولین نوشته این تاپیک ، نیازمندی ها را تکمیل کنید . هنوز برای خیلی از محیطها کد کاملی ارائه نشده

dkhatibi
شنبه 12 خرداد 1386, 16:29 عصر
کامپوننت برای دلفی

این بسته شامل : سورس کد، برنامه‌ی نمایشی و فایل توضیحات هست.

این هم تصویر یکی از کامپوننت‌ها در زمان اجرا :


http://img.majidonline.com/pic/91763/Image_01.jpg


قبلا از سورس کد این تقویم استفاده کردم. این تقویم با یک تقویم خورشیدی غیر رایگان که از یک سایتی دموی اونو گرفتم در حدود سال 1410 یک روز اختلاف داشت. آیا این مشکل رفع شده یا مشکل از اون تقویم ه بوده؟

m-khorsandi
شنبه 12 خرداد 1386, 17:58 عصر
نمی‌دونم دقیقاً کدوم بخش از کد رو میگی و با کدوم کامپوننت مقایسه کردی!
در ضمن این بار اولی هست که من سورس این بسته رو منتشر کردم.

محمد میرمصطفی
شنبه 12 خرداد 1386, 23:01 عصر
این کد (http://www.codeproject.com/useritems/PersianDateTime.asp) رو نگاه کنید.

SalarSoft
دوشنبه 14 خرداد 1386, 08:58 صبح
Delphi:
مبدل تاریخ میلادی به شمسی و برعکس دارای Demo

کلاس TFaDate مجموعه ای از توابع آماده برای راحتی کار برنامه نویسان داره

راهنما و دانلود در آدرس زیر:

تبدیل تاریخ میلادی به شمسی و برعکس برای دلفی (http://www.softprojects.org/KB/Articles/Delphi/UFaDate.aspx?lng=fa)

Mamdos
سه شنبه 15 خرداد 1386, 05:39 صبح
قبلا از سورس کد این تقویم استفاده کردم. این تقویم با یک تقویم خورشیدی غیر رایگان که از یک سایتی دموی اونو گرفتم در حدود سال 1410 یک روز اختلاف داشت. آیا این مشکل رفع شده یا مشکل از اون تقویم ه بوده؟


اینجا (http://fa.farsiweb.ir/fawiki/Iranian_Calendar_Accuracy) توضیح کاملی درباره‌ی صحت تقویم جلالی داده (برای رعایت امانت چیزی ازش حذف نکردم):


صحت تقویم شمسی
از فارسی‌وب


قانون ایران به‌وضوح بیان می‌کند که در محاسبهٔ تقویم باید از سال خورشیدی حقیقی استفاده کرد، که این کار نیازمند محاسبات نجومی برای تعیین نقطهٔ اعتدال فروردین و ظهر شرعی است. مشکل اینجاست که قانون محاسبهٔ تقویم که در سال ۱۳۰۴ شمسی (۱۹۲۵میلادی) تصویب شده، مبهم است. مهمترین مشکل این است که قانون، محل مشاهدهٔ ظهر شرعی را، که برای تعیین روز اول سال ایرانی استفاده می‌شود، مشخص نمی‌کند.

این مسئله باعث شده که تعدادی از ستاره‌شناسان (از جمله رینگولد و دِرشویتز) نصف‌النهاری از تهران، و بقیه (از جمله ایرج‌ ملک‌پور) نصف‌النهار ۵۲٫۵ شرقی را (نصف‌النهاری که ساعت استاندارد ایران را تعیین می‌کند) به عنوان محل تشخیص اولین روز سال در نظر بگیرند. به همین دلیل هیچ‌کس واقعاً نمی‌داند که آیا سال ۱۴۶۹ شمسی کبیسه خواهدبود یا نه. درنتیجه، جز در شرایطی که قانون اصلاح شده و نصف‌النهاری مشخص شود، هر الگوریتمی که مدعی باشد که برای سال ۱۴۶۹ یا سال‌های بعد از آن کاربرد دارد، مکانی را به عنوان محل مشاهده فرض می‌کند که نباید فرض کند.

همچنین، قبل از سال ۱۳۰۴ شمسی، طول ماه‌های ایرانی با طول فعلی آنها متفاوت بود. برای مثال، همهٔ سال‌ها حداقل یک ماه ۳۲ روزه داشتند. به همین دلیل، همهٔ الگوریتم‌هایی که طول فعلی ماه‌ها را پیش فرض قرارمی‌دهند نتایج غلطی برای سال ۱۳۰۳ شمسی و سال‌های قبل از آن به‌دست می‌دهند. مشکلات ذکر شده در بالا عملاً هر الگوریتمی (که بدون جدول داده‌ها برای تعداد روزها در ماه‌های سال ۱۳۰۴ و قبل از آن، کارمی‌کند) را محدود به دورهٔ زمانی سال‌های ۱۴۶۸-۱۳۰۴ شمسی می‌کند. در تقویم لینوکس شریف ۲ یکی از پراستفاده‌ترین الگوریتم‌های محاسباتی ۳۳ ساله به کار برده ‌شده‌است. این الگوریتم در سراسر دورهٔ ۱۴۶۸-۱۳۰۴ با تقویم رسمی (نجومی) شمسی مطابقت دارد. همچنین این همان الگوریتمی است که در دو نرم‌افزار بین‌المللی، دات نت مایکروسافت و مونوی ناوِل به کار رفته است.

لازم به ذکر است که تقویم ایرانی با الگوریتم محاسباتی ۲۸۲۰ ساله، که بوسیلهٔ احمد بیرَشک و سایرین پیشنهاد داده‌ شده، نسبت به تقویم ۳۳ ساله دقت کمتری دارد: اول این که زودتر از دورهٔ ۳۳ ساله در مطابقت با تقویم نجومی رسمی شکست می‌خورد (اولین شکست در سال ۲۰۲۵ میلادی است)، و دوم این که قاعدهٔ پیشنهاد شده در الگوریتم۲۸۲۰ ساله براساس سال میانگین استوایی پی‌ریزی شده، نه سال میانگین اعتدال فروردین.

فارسی‌وب درحال کار برای گسترش کُد تقویم استاندارد شمسی خود به سال‌های قبل از ۱۳۰۴ شمسی است، و اطلاعاتی درمورد تقویم ایرانی واقعی مورد استفاده در سال‌های ۱۳۰۳-۱۲۳۰ شمسی در ایران جمع‌آوری کرده است. ما از هرگونه اطلاعاتی در زمینهٔ تقویم ایرانی مورد استفاده قبل از این دوره استقبال می‌کنیم.

dkhatibi
چهارشنبه 16 خرداد 1386, 14:24 عصر
شاید مشکل از این باشد...
اما من به این دلیل چرت گفتم. دانلود (http://www.oxinsoft.com/shamsidll/about.htm)

reza1357
چهارشنبه 16 خرداد 1386, 15:15 عصر
قبلا در یک تایپکی این رو معرفی کردم بهترین و جالب ترین تقویم شمسی

سلام دوستان ، نمیدونم این تقویم توی سایت معرفی شده یا نه بهرحال هروقت چند بار تاپیکی با همین نام ایجاد میشه گفتم بزارم تا دوستان استفاده کنند.

8722

ما رو از دعای خیر بی نصیب نکنید.

موفق و پیروز باشید

Inprise
جمعه 01 تیر 1386, 20:51 عصر
این مبحث به بخش Open Source منتقل شد .
و هنوز برای بسیاری از موارد لیست شده در اولین مطلب راه حلی ارائه نشده . افرادی که فرصت یا تمایل دارن لطفا کدهائی که برای هر زبان یا محیط ارائه شده رو بصورت کامل همراه با یک نمونه کد و ترجیحا" یک عکس در قالب یک فایل Zip یه جائی بگذارن و لینک بدن یا ضمیمه کنن .

P.S : خیلی خوب میشه اگر یک نفر تمام کدهائی که به دات نت مربوط است را همراه با مثال در یک فایل جمع کنه و ضمیمه کنه .

hmm
شنبه 02 تیر 1386, 09:26 صبح
من کد pls/sql اوراکل رو دارم . در لیست نبود ، آیا میتونه مفید باشه؟

pooyanm
شنبه 02 تیر 1386, 12:36 عصر
من کد pls/sql اوراکل رو دارم . در لیست نبود ، آیا میتونه مفید باشه؟
شما بذار مفید نباشه مضر نیست.

fabdolkarimi
سه شنبه 05 تیر 1386, 13:19 عصر
نوشته شده توسط reza1357 http://www.barnamenevis.org/forum/images/buttons/viewpost.gif (http://barnamenevis.org/forum/showthread.php?p=345963#post345963)
سلام دوستان ، نمیدونم این تقویم توی سایت معرفی شده یا نه بهرحال هروقت چند بار تاپیکی با همین نام ایجاد میشه گفتم بزارم تا دوستان استفاده کنند.

ضمیمه 8722 (http://barnamenevis.org/forum/attachment.php?attachmentid=8722)

سلام
ببخشید ممکنه بگید که چه جوری پروژه تون رو نوشتید؟ من هر چی توش می گردم حتی یه خط کد هم پیدا نمی کنم، البته می دونم کگه از dll ها استفاده کردید ول اگه می شه بگید که چه طوری اینکار رو کردید؟

Bayazee
دوشنبه 11 تیر 1386, 03:52 صبح
سلام
یک ماژول رو برای همین کار تو پایتون نوشتم که امدوارم مفید واقع بشه . در چند روژه آینده تغییراتی اساسی روش می دم و کامل ترش می کنم .

http://osp.ir/projects/pycalverter


from Calverter import Calverter
cal = Calverter()
jd = cal.gregorian_to_jd(2007,07,01)
wday = cal.jwday(jd)
print "Jalali: "
print cal.JALALI_WEEKDAYS[wday],
print cal.jd_to_jalali(jd)
print "\nIslamic: "
print cal.ISLAMIC_WEEKDAYS[wday],
print cal.jd_to_islamic(jd)

if cal.leap_islamic(1428) :
print 'Leap Isalmic year !'

خروجی :



Jalali:
Yekshanbeh (1386, 4, 10)

Islamic:
al-ahad (1428, 6, 15)
Leap Isalmic year !

oxygenws
شنبه 16 تیر 1386, 02:37 صبح
کد PHP:
http://svn.berlios.de/svnroot/repos/serendipity/trunk/include/functions_calendars.inc.php

البته کد مربوط به قسمت maketime به اندازهء maketime خود PHP قابلیت مانور نداره، اما برای تاریخ های مثبت(!) کاملا درست عمل می کنه

cybercoder
شنبه 16 تیر 1386, 10:41 صبح
جاوا اسکریپتشو ندیدم تو پست های دوستان شایدم خوب نگا نکردم ولی کار از محکم کاری عیب نمی کنه. یه date picker با استفاده از js
http://www.codeproject.com/useritems/Persian_Date_Picker.asp

موید و پیروز باشید

mohammadpour59
پنج شنبه 28 تیر 1386, 22:40 عصر
Public Sub MeToday(ByRef ShDay As Integer, ByRef ShMonth As Integer, ByRef ShYear As Integer, ByRef ShWeekDay As String)
'This procedure change NowDate to Shamsi date and save it in ShDay , ShMonth, ShYear variables.
'Also it return the Persian Weekday in ShWeekDay variable and can use in all parts of project

Dim aryweekday(7) As String
aryweekday(1) = "í˜ÔäÈå"
aryweekday(2) = "ÏæÔäÈå"
aryweekday(3) = "Óå ÔäÈå"
aryweekday(4) = "åÇÑÔäÈå"
aryweekday(5) = "äÌÔäÈå"
aryweekday(6) = "ÌãÚå"
aryweekday(7) = "ÔäÈå"
Dim year1, month1, day1, temp As String
Dim IntDay As Integer
Dim IntMonth As Integer
Dim IntYear As Integer
Dim intShamsDay As Integer
Dim intShamsMonth As Integer
Dim intShamsYear As Integer
Dim intTemp As Integer
Dim intRemain As Integer

IntDay = Day(Date)
IntMonth = Month(Date)
IntYear = Year(Date)

Select Case IntMonth
Case Is = 1:
intShamsYear = IntYear - 622
If IntDay <= 20 Then
intShamsMonth = 10
intShamsDay = IntDay + 10
Else
intShamsMonth = 11
intShamsDay = IntDay - 20
End If

Case Is = 2:
intShamsYear = IntYear - 622
If IntDay <= 19 Then
intShamsMonth = 11
intShamsDay = IntDay + 11
Else
intShamsMonth = 12
intShamsDay = IntDay - 19
End If

Case Is = 3:
If IntDay <= 20 Then
intShamsMonth = 12
intShamsDay = IntDay + 9
intShamsYear = IntYear - 622
Else
intShamsMonth = 1
intShamsDay = IntDay - 20
intShamsYear = IntYear - 621
End If

Case Is = 4:
intShamsYear = IntYear - 621
If IntDay <= 20 Then
intShamsMonth = 1
intShamsDay = IntDay + 11
Else
intShamsMonth = 2
intShamsDay = IntDay - 20
End If

Case Is = 5:
intShamsYear = IntYear - 621
If IntDay <= 21 Then
intShamsMonth = 2
intShamsDay = IntDay + 10
Else
intShamsMonth = 3
intShamsDay = IntDay - 21
End If

Case Is = 6:
intShamsYear = IntYear - 621
If IntDay <= 21 Then
intShamsMonth = 3
intShamsDay = IntDay + 10
Else
intShamsMonth = 4
intShamsDay = IntDay - 21
End If

Case Is = 7:
intShamsYear = IntYear - 621
If IntDay <= 22 Then
intShamsMonth = 4
intShamsDay = IntDay + 9
Else
intShamsMonth = 5
intShamsDay = IntDay - 22
End If

Case Is = 8:
intShamsYear = IntYear - 621
If IntDay <= 22 Then
intShamsMonth = 5
intShamsDay = IntDay + 9
Else
intShamsMonth = 6
intShamsDay = IntDay - 22
End If


Case Is = 9:
intShamsYear = IntYear - 621
If IntDay <= 22 Then
intShamsMonth = 6
intShamsDay = IntDay + 9
Else
intShamsMonth = 7
intShamsDay = IntDay - 22
End If

Case Is = 10:
intShamsYear = IntYear - 621
If IntDay <= 22 Then
intShamsMonth = 7
intShamsDay = IntDay + 8
Else
intShamsMonth = 8
intShamsDay = IntDay - 22
End If

Case Is = 11:
intShamsYear = IntYear - 621
If IntDay <= 21 Then
intShamsMonth = 8
intShamsDay = IntDay + 9
Else
intShamsMonth = 9
intShamsDay = IntDay - 21
End If

Case Is = 12:
intShamsYear = IntYear - 621
If IntDay <= 21 Then
intShamsMonth = 9
intShamsDay = IntDay + 9
Else
intShamsMonth = 10
intShamsDay = IntDay - 21
End If
End Select
year1 = Trim(Str(intShamsYear))
month1 = Trim(Str(intShamsMonth))
day1 = Trim((intShamsDay))
ShYear = year1
ShMonth = month1
ShDay = day1
ShWeekDay = aryweekday(DatePart("w", Date))
End Sub
Public Function CheckDate(ByVal InDay As Long, ByVal InMonth As Long, ByVal InYear As Long) As Boolean
CheckDate = True
If Not (InYear >= 1300 And InYear <= 9999) Then
CheckDate = False
Exit Function
End If
If Not (InDay >= 1 And InDay <= 31) Then
CheckDate = False
Exit Function
End If
If InMonth >= 1 And InMonth <= 12 Then
If InMonth >= 1 And InMonth <= 6 And InDay > 31 Then
CheckDate = False
Exit Function
End If

If InMonth >= 7 And InMonth <= 12 And InDay > 30 Then
CheckDate = False
Exit Function
End If
Else
CheckDate = False
Exit Function
End If
End Function

VNSoft
دوشنبه 01 مرداد 1386, 19:17 عصر
http://barnamenevis.org/forum/showthread.php?t=67677

hector2000
سه شنبه 02 مرداد 1386, 00:15 صبح
با سلام
دوستان کد تبدیل تاریخ شمسی به میلادی را هم دارید؟
با تشکر

hector2000
شنبه 06 مرداد 1386, 18:49 عصر
با سلام
دوستان شاید خندتون بگیره ولی می خواهم بگم که جواب سوالم را فهمیدم و می خواهم در اینجا هم برای دوستان علاقه مند قرار بدم تا بدبختی هایی که من و دوستم کشیدیم را نکشند.
به پییوست یکی از کاملترین مبدل های تقویم شمسی به میلادی و بلعکس را تقدیم میکنم.
این تقویم از الگوی تاریخ جلالی پیروی می کند بدین معنی که تاریخ رسمی کشورمان نیز از همین الگو استفاده می کند.
این برنامه را به کمک یکی از دوستام به پایان رساندیم و با استفاده از خود تقویم فارسی مجموعه دات نت بارها ازمایشش کردیم.مطمئن باشید که اشتباه نمی کند.
این فایل را بصورت ASP برای دوستان قرار می دهم که براحتی می توانند ان را به کدهای وی بی و ی بی دات نت تبدیل کنند.
طریقه استفاده:
اگر در ASP می خواهید استفاده کنید:
اول فایل را به برنامتون INCLUDE کنید و بعد برای تبدیل تاریخ میلادی به شمسی از نمونه های زیر استفاده کنید.
میلادی به شمسی:
برای نمایش کامل تاریخ کنونی (همراه روز هفته ،نام ماه،سال،روز):("IRAN(DATE(),"ALL
برای نمایش کامل تاریخ خاص:فقط بجای() DATE تاریخ خودتون را بگذارید
برای نمایش بخشی از تاریخ:("IRAN(DATE(),"WEEK برای نمایش هفته
("IRAN(DATE(),"MONTH ماه،("IRAN(DATE(),"DAY روز،("IRAN(DATE(),"YEAR سال
تمامی مقادیر را می توان برای تاریخ خاص هم انجام داد

شمسی به میلادی:
(TOMILAD(YEAR,MOUNTH,DAY که بجای YEAR تاریختون وبجای MOUNTH ماهتون وبجای DAY روزتون را قرار بدید و ان را تحویل بگیرید.
هر دو تابع از نوع FUNCTION هستند(یعنی مستقیم چاپشون کنید)
موفق باشید.
با تشکر از دوست ارجمندم حسن اقا.

mmehdyt
سه شنبه 09 مرداد 1386, 19:11 عصر
اگه هم پرل سراغ دارید لطفا لینک بدید.

hossein taghi zadeh
چهارشنبه 21 شهریور 1386, 15:29 عصر
با سلام


کامپوننت برای دلفی

این بسته شامل : سورس کد، برنامه‌ی نمایشی و فایل توضیحات هست.

این هم تصویر یکی از کامپوننت‌ها در زمان اجرا :

http://img.majidonline.com/pic/91763/Image_01.jpg


یه سری پروپرتی به کامپوننت آقای خورسندی اضافه شده از جمله EditMask.
در ضمن مشکل سال کبیسه هم حل شد.

hossein taghi zadeh
چهارشنبه 21 شهریور 1386, 15:40 عصر
با سلام

این هم تبدیل تاریخ میلادی و شمسی در PHP. (تبدیل شده‌ی SolarUtl دلفی به پی.اچ.پی)

پرواز
شنبه 24 شهریور 1386, 05:38 صبح
با سلام.

من یه تعداد فانکشن و پروسیجر به SolarUtl آقای کامبیز خجسته اضافه کردم.
کاملش رو میذارم اینجا. توضیحاتی که آقای خجسته در ابتدای این فایل دادن رو به رسم امانت پاک نکردم.
فقط تنها کاری که کردم اینه که به ابتدای اعلان هر فانکشن و پروسیجر یه خط کامنت فارسی گذاشتم که مشخص بشه کارش چیه.

فکر کنم اکثر توابع مورد نیاز تو برنامه نویسی رو داشته باشه.
دلیل اینکه مثال آماده نکردم اینه که این یونیت فقط عملیات محاسباتی انجام میده و اینترفیس نداره. البته یه چیز تو مایه های کامپوننت آقای خورسندی توسط خود آقای خجسته آماده شده بود که به اندازه این کامپوننت کارایی نداشت.
اگه آقای خورسندی توابع این یونیت رو به کامپوننتشون اضافه کنن یا به صورت یه کامپوننت غیرویژوال به پکشون اضافه کنند فکر کنم برای دلفی کارها مرجع خوبی بشه. من لیست همه توابع و پروسیجرها رو اینجا میارم.

//آیا سال کبیسه است یا نه
function IsLeapYear(DateKind: TDateKind; Year: Word): Boolean;
//روزهای ماه
function DaysOfMonth(DateKind: TDateKind; Year, Month: Word): Word;
//آیا تاریخ صحیح است
function IsDateValid(DateKind: TDateKind; Year, Month, Day: Word): Boolean;
//تبدیل رشته به تاریخ
function StrToDateEx(DateKind: TDateKind; sDate : string;var Year, Month, Day: Word): Boolean;
//تبدیل تاریخ به رشته
function DateToStrEx(DateKind: TDateKind; Year, Month, Day: Word): string;
//تبدیل سال میلادی به شمسی با نتیجه رشته ای
function GregorianToSolarStr(Date: TDateTime): string;
//معتبر کردن تاریخ
procedure ValidateDate(DateKind: TDateKind;var Year, Month, Day: Word);
//تعداد روزهای گذشته سال
function DaysToDate(DateKind: TDateKind; Year, Month, Day: Word): Word;
//تعداد روزهای باقیمانده سال
function DaysToEndOfYear(DateKind: TDateKind; Year, Month, Day: Word): Word;
//تعداد روزها و سال را گرفته و ماه و روز مربوطه را می دهد
function DateOfDay(DateKind: TDateKind; Days, Year: Word; var Month, Day: Word): Boolean;
//شماره روز هفته
function DayOfWeekEx(DateKind: TDateKind; Year: Word; Month, Day: Word): Word;
//افزودن به تاریخ
Procedure IncDate(DateKind: TDateKind;var Year, Month, Day: Word; AYears, AMonths, ADays: Smallint);overload;
function IncDate(DateKind: TDateKind; sDate: string; AYears, AMonths, ADays: Smallint):string;overload;
//تبدیل تاریخ میلادی به شمسی بصورت مجزا
function GregorianToSolar(var Year, Month, Day: Word): Boolean;
//تبدیل تاریخ شمسی به میلادی
function SolarToGregorian(var Year, Month, Day: Word): Boolean;
//تبدیل تاریخ میلادی به شمسی
function SolarEncodeDate(Year, Month, Day: Word): TDateTime;
//تبدیل تاریخ میلادی به شمسی
procedure SolarDecodeDate(Date: TDateTime; var Year, Month, Day: Word);
//تبدیل تاریخ میلادی به شمسی
procedure SolarDecodeDateStr(Date: TDateTime; var Year, Month, Day: String);
//مقدار عددی تاریخ شمسی
function SolarDateToInt(Year, Month, Day: Word): Integer;overload;
//مقدار عددی تاریخ شمسی
function SolarDateToInt(SolarStrDate: String): Integer;overload;
//برگرداندن عدد به تاریخ شمسی
function IntToSolarDate(SolarIntDate: Integer): String;
//تعداد روزهای بین دو تاریخ شمسی
function SolarDaysBetween(const SolarNow, SolarThen: String): Integer;
//برگرداندن المانهای تاریخ شمسی بصورت صحیح
function SolarDateElemans(SolarDate: String; var Year, Month, Day: Word): Boolean;
//آیا تاریخ شمسی صحیح است؟
function IsValidSolarDate(SolarDate: String): Boolean;
//آیا رشته داده شده فقط شامل عدد است؟
function IsIntNumber (S:String):Boolean;

golihaghighi
شنبه 24 شهریور 1386, 09:22 صبح
چرا ظاهر تقویم های فارسی هیچ وقت به زیبایی تقویم های انگلیسی نمیشه؟

پرواز
شنبه 24 شهریور 1386, 16:27 عصر
چرا ظاهر تقویم های فارسی هیچ وقت به زیبایی تقویم های انگلیسی نمیشه؟
چون ما ایرانی ها معمولاً به اینترفیس برنامه که یکی از مهمترین فاکتورهای برنامه نویسیه اهمیت نمیدیم.
شاید از لحاظ ساختاری خیلی خوب کار کرده باشیم. ولی به ظواهر نمی رسیم.

golihaghighi
دوشنبه 26 شهریور 1386, 10:06 صبح
شاید هم مشکل اصلی حروف بهم پیوسته در فارسی باشه که نمیتوان اونو به زیبایی خط انگلیسی نمایش داد.

Will_Smith
چهارشنبه 28 شهریور 1386, 12:18 عصر
چرا ظاهر تقویم های فارسی هیچ وقت به زیبایی تقویم های انگلیسی نمیشه؟
باعث تعجبه
چطور میتونید همچین حرفی بزنید
این نمونه تقویم Falad هست که فقط با تغییر فونت به این شکل در اومده

sinpin
چهارشنبه 28 شهریور 1386, 12:34 عصر
چون ما ایرانی ها معمولاً به اینترفیس برنامه که یکی از مهمترین فاکتورهای برنامه نویسیه اهمیت نمیدیم.
شاید از لحاظ ساختاری خیلی خوب کار کرده باشیم. ولی به ظواهر نمی رسیم.

من با عکس این قضیه بیشتر موافقم :لبخندساده:

delbarir
دوشنبه 02 مهر 1386, 11:53 صبح
یک سری کد راحتتر



type
TYMD = Packed record
YY: Byte;
MM: Byte;
DD: Byte;
end;
TLeapYear = Set of Byte;
TMonthLen = Array[1..12] of Byte;

const
DeferDay = 35143;
ZYMD: TYMD = (YY:0;MM:0;DD:0);
LeapYear: TLeapYear = [75,79,83,87,91,95,99,103,107,111,115,119,123,127,1 31,135];
MonthLen: TMonthLen = (31,31,31,31,31,31,30,30,30,30,30,30);



function FDate(x: integer): TYMD;
var
i,j: integer;
x : Integer;
begin
x := Trunc(Now);
x := x - DeferDay;
if x < 0 then
begin
Result := ZYMD;
exit;
end;
i := 74;
Repeat
inc(i);
if i in LeapYear then
j := 366
else
j := 365;
x := x - j;
Until x <= 0;
x := x + j;
Result.YY := i;
i := 0;
Repeat
inc(i);
x := x - MonthLen[i];
Until x <= 0;
Result.MM := i;
Result.DD := x + MonthLen[i];
end;

ali_kolahdoozan
یک شنبه 07 بهمن 1386, 15:03 عصر
مبدل این همه زبان هست الا ++c . برای ++c کسی نداره ؟ vc نه ها ++c اصیل

golihaghighi
یک شنبه 28 بهمن 1386, 08:47 صبح
مبدل تاریخ شمسی به میلادی و قمری و برعکس برای #C ندارید؟

Valadi
دوشنبه 29 بهمن 1386, 08:28 صبح
اینو من دارم به زبان #C اما توی سیستمم گم کردم پیدا کنم میزارم توی سایت

Valadi
دوشنبه 29 بهمن 1386, 19:18 عصر
اینو ببیند برای #C

mohammad25
پنج شنبه 02 اسفند 1386, 18:53 عصر
خیلی ممنون از اساتید

من مد یا هک یا قالب تاریخ هجری شمسی که روی vBulletin Version همین سایت نصب شده و (( تاریخ عضویت و تاریخ ارسال پست را به صورت هجری شمسی نشون میده)) را می خوام
بعضی دوستان مانند سایت http://www.persian-forum.com قبلا نصب کردن ولی با مشکل مواجه شدن و حذفش کردن
ممنون از همه ی اساتید

hassan p.b
یک شنبه 26 اسفند 1386, 12:41 عصر
ضمن تشکر لازم دیدم رسما تشکر نمایم
واقعا عالی است
با تشکر

mohammad_alikhani
یک شنبه 25 فروردین 1387, 15:01 عصر
من از زمانی که یادم می یاد یه کامپوننت نبود که هم تاریخ میلادی داشته باشه هم شمسی. حالا قمری پیشکش...
آخر سر به این فکر افتادم که خودم واسه دلفی این ابزار رو تولید کنم... بعد از اتمام کار حتما برای هم روی سایت آپ می کنم.

امیـرحسین
دوشنبه 05 اسفند 1387, 21:02 عصر
من خودم تو PHP دوبار از اول نشستم کلاس نوشتم ولی بعد از سر و کله زدن با باگهاش، تصمیم گرفتم بیخیال خودکفایی شم و از نمونه های آزمایش شده استفاده کنم.

این کلاس رو از iranphp.net گرفتم. یه مقداری شلوغ پلوغه ولی متدهای مبدلش (جلالی به میلادی و میلادی به جلالی) خوب کار می کنه.




واسه یه کاری دنبال تقویم جاوااسکریپت میگشتم. بطور اتفاقی وارد سایت آقای علی فرهادی (http://farhadi.ir) شدم. اونجا یه تقویم خیلی خوب و مفید توسط ایشون ساخته شده: JalaliJSCalendar :: JavaScript DHTML Calendar (http://farhadi.ir/works/jalalijscalendar)

اضافه کنم که سایت ایشون مطالب مفید دیگه ای هم دارند.

salehbagheri
سه شنبه 13 اسفند 1387, 23:40 عصر
سلام!

تبديل تاريخ ميلادي به شمسي و كلي امكانات ديگر!

زبان VisualBasic 2008

http://barnamenevis.org/forum/showpost.php?p=688138&postcount=19

saebifar
چهارشنبه 26 فروردین 1388, 18:02 عصر
با عرض سلام لطفا برای مشکل کار با تاریخ سری به سایت www.nano3oft.com (http://www.nano3oft.com/) بزنید . دیگه فکر نکنم مشکل کار با تاریخ داشته باشید .

kalali
سه شنبه 22 اردیبهشت 1388, 22:48 عصر
من يك برنامه با vb.netمي خوام كه هم تاريخ شمسي باشد هم تاريخ ميلادي براي ده سال كار كند اگر ممكن سورس كدش رو برايم بكذاريد ازشما ها متشكرم

hobab-theme
سه شنبه 26 خرداد 1388, 14:31 عصر
با سلام
دوستان شاید خندتون بگیره ولی می خواهم بگم که جواب سوالم را فهمیدم و می خواهم در اینجا هم برای دوستان علاقه مند قرار بدم تا بدبختی هایی که من و دوستم کشیدیم را نکشند.
این فایل را بصورت ASP برای دوستان قرار می دهم که براحتی می توانند ان را به کدهای وی بی و ی بی دات نت تبدیل کنند.
طریقه استفاده:
اگر در ASP می خواهید استفاده کنید:
اول فایل را به برنامتون INCLUDE کنید و بعد برای تبدیل تاریخ میلادی به شمسی از نمونه های زیر استفاده کنید.
میلادی به شمسی:...
با تشکر از دوست ارجمندم حسن اقا.
سلام عزیز
میشه لطفاً بگید که چطور میشه از برنامه شما توی VB.NET استفاده کرد؟
لطفاً یه جوری بگید تا ما مبتدی ها هم متوجه بشیم:اشتباه:
ممنون

mdssoft
چهارشنبه 13 آبان 1388, 14:52 عصر
این DLL تعدادی properties و یه متد برای تبدیل DateTime به تقویم شمسی فراهم کرده.
البته من از خود PersianCalendar تو .Net Framework استفاده کردم و این کلاس رو برای راحتی کار و سریع تر شدن انجام پروژه نوشتم.

تمام پروپرتی ها کامنت گذاری شدند و به راحتی متوجه میشید که هر کدام چه مقداری رو بر می گردونه.

لینک دانلود (http://www.barnamenevis.org/forum/showpost.php?p=832385&postcount=369)

sm_2010
جمعه 27 فروردین 1389, 14:09 عصر
کاش کمی توضیحتون بیشتر بود

rahmatr
پنج شنبه 09 دی 1389, 13:15 عصر
یک راه حل ساده برای استفاده از تاریخ شمسی در دات نت 3.5 به بالا :

کلاس زیر را به پروژه اضافه کنید :


using System;
using System.Globalization;

public static class ShamsiDate
{
static PersianCalendar persianCalendar = new PersianCalendar();
public static string ToShamsi(this DateTime miladiDate)
{
string year = persianCalendar.GetYear(miladiDate).ToString();
string month = persianCalendar.GetMonth(miladiDate).ToString().Pa dLeft(2, '0');
string day = persianCalendar.GetDayOfMonth(miladiDate).ToString ().PadLeft(2, '0');
return year + "/" + month + "/" + day;
}

public static DateTime ToMiladi(this string shamsiDate)
{
int year = int.Parse(shamsiDate.Substring(0, 4));
int month = int.Parse(shamsiDate.Substring(5, 2));
int day = int.Parse(shamsiDate.Substring(8, 2));
return persianCalendar.ToDateTime(year, month, day, 0, 0, 0, 0);
}
}


بعد هر جا خواستید استفاده کنید. مثل این :


string shamsiToday = DateTime.Now.ToShamsi();

DateTime miladiDate = "1389/10/11".ToMiladi();

MSK
جمعه 27 اسفند 1389, 21:50 عصر
http://www.fourmilab.ch/documents/calendar/
این سایت انواع مختلف تقویم ها رو توضیح داده و قابلیت تبدیل بین اونها رو داره و سرس کدها به جاوااسکریپت قابل دریافته.

من میلادی به شمسی اون رو به پیتون تبدیل کردم که اینجا قرار میدم و اگه اشتباه نکنم بنا به ادعای نویسندش تا ۵هزار سال بعد از میلاد رو جواب میده!

67665

و روش استفاده:


>>> import PersianDate
>>> PersianDate.today()
(1389.0, 12.0, 27.0, 5.0)
>>> PersianDate.todayStr()
'\xd8\xac\xd9\x85\xd8\xb9\xd9\x87 27 \xd8\xa7\xd8\xb3\xd9\x81\xd9\x86\xd8\xaf 1389'
>>> PersianDate.greg2persian(1950, 1, 1)
(1328.0, 10.0, 11.0)
>>>


که در آن چون کاراکتر های فارسی unicode اند بصورت کدشده چاب شده اند.

ahmadbh
پنج شنبه 16 تیر 1390, 10:49 صبح
سلام
چطور ميتونم تاريخ قمري در دلفي استفاده كنم از چه چيزي استفاده كنم
لطفا نمونه سورس يا كامپوننتي بگذاريد
باتشكر

852258
سه شنبه 29 شهریور 1390, 11:24 صبح
من از این کد در دلفی استفاده می کنم



function shamsi(const a: string): string;
var
y, m, d: integer;
ys, ms, ds: string;
begin
{ m := strtoint((copy(a,0,2)));//05/09/07 2007/05/09
d := strtoint((copy(a,4,2)));
y := strtoint((copy(a,7,2)));y := 2000 + y;}

m := strtoint((copy(a, 6, 2))); //05/09/07 2007/05/09
d := strtoint((copy(a, 9, 2)));
y := strtoint((copy(a, 3, 2))); y := 2000 + y;
if ((M < 3) or ((M = 3) and (D < 21))) then
Y := Y - 622
else
Y := Y - 621;

case M of
1:
if (D < 21) then begin
M := 10; D := D + 10;
end
else begin
M := 11; D := D - 20;
end;
2:
if (D < 20) then begin
M := 11; D := D + 11;
end
else begin
M := 12; D := D - 19;
end;
3:
if (D < 21) then begin
M := 12; D := D + 9;
end
else begin
M := 1; D := D - 20;
end;
4:
if (D < 21) then begin
M := 1; D := D + 11;
end
else begin
M := 2; D := D - 20;
end;
5, 6:
if (D < 22) then begin
M := M - 3; D := D + 10;
end
else begin
M := M - 2; D := D - 21;
end;
7, 8, 9:
if (D < 23) then begin
M := M - 3; D := D + 9;
end
else begin
M := M - 2; D := D - 22;
end;
10:
if (D < 23) then begin
M := 7; D := D + 8;
end
else begin
M := 8; D := D - 22;
end;
11, 12:
if (D < 22) then begin
M := M - 3; D := D + 9;
end
else begin
M := M - 2; D := D - 21;
end;
end;

if d < 10 then ds := '0' + inttostr(d)
else
ds := inttostr(d);
if m < 10 then ms := '0' + inttostr(m)
else
ms := inttostr(m);
ys := inttostr(y); ys := copy(ys, 3, 2);

result := ys + '/' + ms + '/' + ds;
end;


روش استفاده



procedure TFormInfoAlum.FormShow(Sender: TObject);
begin
MaskEdit1.Text := shamsi(DateToStr(Date));
end;


مرسی از همگی:تشویق:

M.T.P
چهارشنبه 18 آبان 1390, 00:43 صبح
یک تابع جهت تبدیل تاریخ میلادی به شمسی به زبان vb6


Function MiladiToShamsi(ByVal StrDate As String) As String
Dim IntArrDay(0 To 1, 1 To 12) As Integer
Dim IntArrRuz(0 To 1, 1 To 12) As Integer
Dim IntI, IntChrisToNoruz As Integer
Dim IntKabiseh, IntLeapYear As Integer
Dim IntYear, IntMonth, IntDay As Integer
Dim IntSal, IntMah, IntRuz As Integer
Dim StrFormat As String

IntArrDay(0, 1) = 31: IntArrDay(0, 2) = 28: IntArrDay(0, 3) = 31: IntArrDay(0, 4) = 30
IntArrDay(0, 5) = 31: IntArrDay(0, 6) = 30: IntArrDay(0, 7) = 31: IntArrDay(0, 8) = 31
IntArrDay(0, 9) = 30: IntArrDay(0, 10) = 31: IntArrDay(0, 11) = 30: IntArrDay(0, 12) = 31
IntArrDay(1, 1) = 31: IntArrDay(1, 2) = 29: IntArrDay(1, 3) = 31: IntArrDay(1, 4) = 30
IntArrDay(1, 5) = 31: IntArrDay(1, 6) = 30: IntArrDay(1, 7) = 31: IntArrDay(1, 8) = 31
IntArrDay(1, 9) = 30: IntArrDay(1, 10) = 31: IntArrDay(1, 11) = 30: IntArrDay(1, 12) = 31

IntArrRuz(0, 1) = 31: IntArrRuz(0, 2) = 31: IntArrRuz(0, 3) = 31: IntArrRuz(0, 4) = 31
IntArrRuz(0, 5) = 31: IntArrRuz(0, 6) = 31: IntArrRuz(0, 7) = 30: IntArrRuz(0, 8) = 30
IntArrRuz(0, 9) = 30: IntArrRuz(0, 10) = 30: IntArrRuz(0, 11) = 30: IntArrRuz(0, 12) = 29
IntArrRuz(1, 1) = 31: IntArrRuz(1, 2) = 31: IntArrRuz(1, 3) = 31: IntArrRuz(1, 4) = 31
IntArrRuz(1, 5) = 31: IntArrRuz(1, 6) = 31: IntArrRuz(1, 7) = 30: IntArrRuz(1, 8) = 30
IntArrRuz(1, 9) = 30: IntArrRuz(1, 10) = 30: IntArrRuz(1, 11) = 30: IntArrRuz(1, 12) = 30

IntYear = Year(StrDate)
IntMonth = Month(StrDate)
IntDay = Day(StrDate)

IntSal = IntYear - 622

If IntYear Mod 4 = 0 Then IntLeapYear = 1 Else IntLeapYear = 0 'Barrasi sale kabisel miladi
If IntSal Mod 4 = 3 Then IntKabiseh = 1 Else IntKabiseh = 0 'Barrasi sale kabisel Shamsi

IntChrisToNoruz = 79

IntRuz = 0
IntRuz = IntRuz + IntDay
For IntI = 1 To IntMonth - 1
IntRuz = IntRuz + IntArrDay(IntLeapYear, IntI)
Next IntI

If (IntRuz > IntChrisToNoruz) Then
IntSal = IntSal + 1
IntRuz = IntRuz - IntChrisToNoruz
Else
For IntMah = 1 To 9
IntRuz = IntRuz + IntArrRuz(IntKabiseh, IntMah)
Next IntMah
If (IntKabiseh = 1) Then
IntRuz = IntRuz + 11
Else
IntRuz = IntRuz + 10
End If
End If

IntMah = 1
While (IntRuz > IntArrRuz(IntKabiseh, IntMah))
IntRuz = IntRuz - IntArrRuz(IntKabiseh, IntMah)
IntMah = IntMah + 1
Wend

StrFormat = CStr(IntSal) & "/" & Format$(IntMah, "00") & "/" & Format$(IntRuz, "00")
MiladiToShamsi = StrFormat
End Function

hamzehsh
یک شنبه 18 دی 1390, 15:28 عصر
تبديل تاريخ و به دست آوردن تاريخ به زبان #C
C#‎

8038380383

mortezaadi
یک شنبه 07 خرداد 1391, 13:21 عصر
پروژه متن باز تقویم فارسی برای JDK و GWT

http://sourceforge.net/projects/persian/

http://code.google.com/p/persian-calendar/