PDA

View Full Version : تقویم شمسی



hi1001
سه شنبه 15 تیر 1389, 18:14 عصر
سلام خدمت دوستان

من تاریخ رو به صورت میلادی داخل پایگاه داده ذخیره میکنم,میخوام هنگام گزارش گیری از جدول تاریخ رو به
شمسی نمایش بده
اگه با یک سورس راهنمایی کنیید ممنون میشم
من dllهای تبدیل تاریخ میلادی به شمسی را دارم ولی نتونستم این کار رو انجام بدم

hi1001
سه شنبه 15 تیر 1389, 19:58 عصر
کسی نمیتونه جواب بده
احتیاج دارمش

Mohandes2009
سه شنبه 15 تیر 1389, 20:49 عصر
سلام خدمت دوستان

من تاریخ رو به صورت میلادی داخل پایگاه داده ذخیره میکنم,میخوام هنگام گزارش گیری از جدول تاریخ رو به
شمسی نمایش بده
اگه با یک سورس راهنمایی کنیید ممنون میشم
من dllهای تبدیل تاریخ میلادی به شمسی را دارم ولی نتونستم این کار رو انجام بدم
شما از همون اول به شمسی چرا ذخیره نمی کنی؟

voodoo01
سه شنبه 15 تیر 1389, 20:57 عصر
با سلام خدمت دوست عزیز این proc را ابتدا در Sql اجرا نمایید
Create FUNCTION [dbo].[dp_ToHijri] (@EDate datetime)
RETURNS nvarchar(50) AS
BEGIN
if @EDate is null return ''

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)

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)
return @YStr+'/'+@MStr+'/'+@dStr
END


سپس با دستور Select
ُ

select [dbo].[dp_ToHijri]([date]) from tblname
فیلد تاریخ را در dp_ToHijri قرار دهید تبدیل به تاریخ شمسی می شود و متنی است <<توجه

hi1001
چهارشنبه 16 تیر 1389, 08:25 صبح
درج کردن تاریخ به میلادی داخل یک دیتابیس یک استاندارد میباشه چون بعدا میتوان روی ان پردازش بیشتری انجام داد


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

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

nasser5050
چهارشنبه 16 تیر 1389, 09:14 صبح
سلام
از persian calender در #c استفاده کن

hi1001
چهارشنبه 16 تیر 1389, 22:25 عصر
از تمام دوستان ممنونم
ولی کارم راه نیوفتاده
لطفا کمک کنید
اطلاعات تاریخ رو بصورت میلادی تو دیتابیس ذخیره می کنم و موقع نمایش توی GridView می خوام اون رو بصورت شمسی نمایش بدم.


من چون مبتدی هستم نمیتونم کدش رو بنویسم :متفکر:
لطفا یک سورس کد بدید
لطفا یک سورس کد بدید
لطفا یک سورس کد بدید
لطفا یک سورس کد بدید

voodoo01
پنج شنبه 17 تیر 1389, 01:04 صبح
دوست عزیز از نظر من استفاده از همون function برای مبتدی ها بهترین راه هستش ولی این کد من خودم امتحان کردم درست جواب می داد
System.Globalization.CultureInfo calture = new System.Globalization.CultureInfo("fa-IR");
System.Globalization.DateTimeFormatInfo info = calture.DateTimeFormat;
info.AbbreviatedDayNames = new string[] { "ی", "د", "س", "چ", "پ", "ج", "ش" };
info.DayNames = new string[] { "یکشنبه", "دوشنبه", "ﺳﻪشنبه", "چهارشنبه", "پنجشنبه", "جمعه", "شنبه" };
info.AbbreviatedMonthNames = new string[] { "فروردین", "ارديبهشت", "خرداد", "تير", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند", "" };
info.MonthNames = new string[] { "فروردین", "ارديبهشت", "خرداد", "تير", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند", "" };
info.AMDesignator = "ق.ظ";
info.PMDesignator = "ب.ظ";
info.ShortDatePattern = "yyyy/MM/dd";
info.FirstDayOfWeek = DayOfWeek.Saturday;
System.Globalization.PersianCalendar cal = new System.Globalization.PersianCalendar();

typeof(System.Globalization.DateTimeFormatInfo).Ge tField("calendar", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).SetValue (info, cal);
object obj = typeof(System.Globalization.DateTimeFormatInfo).Ge tField("m_cultureTableRecord", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).GetValue (info);
obj.GetType().GetMethod("UseCurrentCalendar", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).Invoke(ob j, new object[] { cal.GetType().GetProperty("ID", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).GetValue (cal, null) });
typeof(System.Globalization.CultureInfo).GetField("calendar", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).SetValue (calture, cal);
typeof(System.Globalization.CultureInfo).GetField("calendar", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).SetValue (calture, cal);

System.Threading.Thread.CurrentThread.CurrentCultu re = calture;
System.Threading.Thread.CurrentThread.CurrentUICul ture = calture;
System.Globalization.CultureInfo.CurrentCulture.Da teTimeFormat = info;
System.Globalization.CultureInfo.CurrentUICulture. DateTimeFormat = info;

آدرس منبع http://social.msdn.microsoft.com/forums/en-US/netfxbcl/thread/4768d48e-aa04-4c15-b688-a58fa4373bc9/

vooodoooo

happy65_sh
پنج شنبه 17 تیر 1389, 09:24 صبح
PersianCalendar p= new PersianCalendar();
DateTime dt = DateTime.Now;
string day = p.GetDayOfMonth(dt).ToString();
string month = p.GetMonth(dt).ToString();
string year = p.GetYear(dt).ToString();
MessageBox.Show(year + "/" + month + "/" + day);

براي استفاده از persionCalender بايد System.Globalization را به using اضافه كني

jalalx
پنج شنبه 17 تیر 1389, 09:36 صبح
همین چند روز پیش یک کلاس PersianDateTime طراحی کردم. بعد از لود کردن داده ها از دیتابیس از این کلاس برای تبدیل تاریخ استفاده کن!
اینم لینکش (http://barnamenevis.org/forum/showthread.php?t=232240)

hi1001
پنج شنبه 17 تیر 1389, 13:00 عصر
از تمام دوستان تشکر میکنم:تشویق::تشویق::تشویق:
واقعا خسته نباشید.


از دوستان کسی میتونه یک دیتابیس با اکسس درست کنه و سوال منو در قالب اون نمایش بده

(داخل دیتابیس یک جدول با دو فیلد داشته باشه یکی نام و یکی تاریخ که تاریخ به صورت میلادی ذخیره شده باشه و با دستورات اونو داخل یکdataGridView به صورت شمسی (فارسی)نمایش بده)

بازم ممنون

voodoo01
پنج شنبه 17 تیر 1389, 16:05 عصر
دوست عزیز این هم کد کامل
با احترام فراوان
Voodoo:لبخند::لبخندساده: