ورود

View Full Version : چطور میشه بجای تاریخ میلادی . تاریخ شمسی را داد ؟



tele_hamid
یک شنبه 14 فروردین 1384, 11:04 صبح
چطور میشه بجای تاریخ میلادی . تاریخ شمسی را داد به نوع داده date time داد ؟
::نوشتن::

________________________________
Pass me the bottle, pass me the wine,
Open your throttle, and I'll drive you right out of your mind,
Watching the waves, watching the sky,
I'm just sitting down here by the riverside,
Watching the world going by...
:)

AminSobati
یک شنبه 14 فروردین 1384, 11:38 صبح
دوست عزیزم،
جنس DateTime تاریخهای قبل از 1700 میلادی رو پشتیبانی نمیکنه و میبایست تاریخ شمسی رو از نوع varchar یا مثلا int ذخیره کرد.
امیدواریم در SQL Server 2005 با توجه به پشتیبانی CLR از تاریخ شمسی، این قبیل مشکلات حل بشه...

tele_hamid
یک شنبه 14 فروردین 1384, 12:04 عصر
جنس DateTime تاریخهای قبل از 1700 میلادی رو پشتیبانی نمیکنه و میبایست تاریخ شمسی رو از نوع varchar یا مثلا int ذخیره کرد.

منظورم اینه که با توجه به مشکل فوق با یک الگوریتمی(مثلا تفریق نمودن) بشه ازش استفاده کرد

ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ــ
i saw the sign and it opened up my eyes :sunglass:

AminSobati
یک شنبه 14 فروردین 1384, 19:18 عصر
اگر از DateTime به اندازه ای تفریق کنین که به قبل از سال 1700 میلادی برگرده، قائدتا باید خطای Overflow بده.
ولی اگر کلا قصدتون داشتن تاریخ شمسی هست، بهتره از توابع نوشته شده توسط برنامه نویسان ایرانی استفاده کنین. شاید در این سایت قبلا پست شده باشه...

M.GhanaatPisheh
یک شنبه 14 فروردین 1384, 19:55 عصر
بهترین راه استفاده از Mask هست
تاریخ شمسی بوسیله این Mask به لاتین تبدیل شده و در DB ذخیره می شه
هر جا لازم بود بصورت میلادی جمع و تفریق روش انجام بدید
هروقت خواستید نمایشش بدید به فارسی برش گردونید.
...

علیرضا جاوید
یک شنبه 14 فروردین 1384, 19:56 عصر
البته بجای اینکه از خود DateTime استفاده کنید بهتره از همون INT استفاده بشه با همون الگوریتم فقط به 2 تا استور پروسیجر برای کد و دیکد کردن تاریخها به عدد احتیاج دارین
اگر خواستی من دارم...

علیرضا جاوید
چهارشنبه 24 فروردین 1384, 18:29 عصر
/****** Object: User Defined Function dbo.DecDate Script Date: 2004/07/14 11:06:15 ب.ظ ******/
CREATE FUNCTION DecDate (@n int)
RETURNS char(12) AS
BEGIN
DECLARE @y int, @m int, @d int, @md int
SET @y = cast( @n / 366 as int)
SET @md = @n % 366
IF (@md < 186)
BEGIN
SET @m = CAST(@md / 31 AS int)
SET @d = @md % 31
END
ELSE
BEGIN
SET @md = @md - 186
SET @m = CAST((@md / 30) AS int)
SET @d = @md % 30
END
RETURN CAST(@D + 1 AS char(2))+'/'+ CAST(@m + 1 AS char(2)) + '/' + CAST(@y + 1300 AS char(4))
END




GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO


/****** Object: User Defined Function dbo.EncDate Script Date: 2004/07/14 11:06:15 ب.ظ ******/
CREATE FUNCTION EncDate (@y int, @m int, @d int)
RETURNS int AS
BEGIN
DECLARE @R int
IF @m < 7
SET @R= (@y - 1300) * 366 + (@m - 1) * 31 + @D - 1
ELSE
SET @R= (@y - 1300) * 366 + (@m - 7) * 30 + @D - 1 + 186
RETURN @R
END


این روش بهترین روشه همه جوره هم جواب میده فقط باید تو اپلیکیشن روز ماه و سال رو خودتون جدا کنید