View Full Version : چطور میشه بجای تاریخ میلادی . تاریخ شمسی را داد ؟
  
tele_hamid
یک شنبه 14 فروردین 1384, 12: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, 12:38 عصر
دوست عزیزم،
جنس DateTime تاریخهای قبل از 1700 میلادی رو پشتیبانی نمیکنه و میبایست تاریخ شمسی رو از نوع varchar یا مثلا int ذخیره کرد. 
امیدواریم در SQL Server 2005 با توجه به پشتیبانی CLR از تاریخ شمسی، این قبیل مشکلات حل بشه...
tele_hamid
یک شنبه 14 فروردین 1384, 13:04 عصر
جنس DateTime تاریخهای قبل از 1700 میلادی رو پشتیبانی نمیکنه و میبایست تاریخ شمسی رو از نوع varchar یا مثلا int ذخیره کرد. 
منظورم اینه که با توجه به مشکل فوق با یک الگوریتمی(مثلا تفریق نمودن) بشه ازش استفاده کرد 
ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ــ
i saw the sign and it opened up my eyes :sunglass:
AminSobati
یک شنبه 14 فروردین 1384, 20:18 عصر
اگر از DateTime به اندازه ای تفریق کنین که به قبل از سال 1700 میلادی برگرده، قائدتا باید خطای Overflow بده.
ولی اگر کلا قصدتون داشتن تاریخ شمسی هست، بهتره از توابع نوشته شده توسط برنامه نویسان ایرانی استفاده کنین. شاید در این سایت قبلا پست شده باشه...
M.GhanaatPisheh
یک شنبه 14 فروردین 1384, 20:55 عصر
بهترین راه استفاده از Mask هست
تاریخ شمسی  بوسیله این Mask به لاتین تبدیل شده و در DB ذخیره می شه
هر جا لازم بود بصورت میلادی جمع و تفریق روش انجام بدید
هروقت خواستید نمایشش بدید به فارسی برش گردونید.
...
علیرضا جاوید
یک شنبه 14 فروردین 1384, 20:56 عصر
البته بجای اینکه از خود DateTime استفاده کنید بهتره از همون INT استفاده بشه با همون الگوریتم فقط به 2 تا استور پروسیجر برای کد و دیکد کردن تاریخها به عدد احتیاج دارین
اگر خواستی من دارم...
علیرضا جاوید
چهارشنبه 24 فروردین 1384, 19: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
این روش بهترین روشه همه جوره هم جواب میده فقط باید تو اپلیکیشن روز ماه و سال رو خودتون جدا کنید
 
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.