سلام
این جدول دیتابیس من هست:
در یوزر کنترل این کد رو برای درج سطر در دیتابیس نوشتم:
string querytext = string.Format( "Insert Into Content(Cnt_Title,Cnt_SubjectID,Cnt_SmallText,Cnt_LongText,Cnt_DateReg,Cnt_LinkMore) Values(N'{0}',{1},N'{2}',N'{3}',{4},'FullContent.aspx')", Title.Value, SubjectIDFild.Value, SmallText.Text, LongText.Text, DateTime.Now.ToShortDateString()); d1.ExecNonQuery(querytext); Alert.InnerText = "پست جدید با موفقیت ثبت شد";
تا اینجا هیچ مشکلی نداره و به درستی عمل میشه. من برای ثبت تاریخ روز از DateTime.Now.ToShortDateString استفاده کردم.
برای اینکه تاریخ رو شمسی کنم کلاس زیر رو به پروژه اضافه کردم:
using System; using System.Collections.Generic; using System.Globalization; using System.Reflection; namespace GSD.Globalization { public class PersianCulture : CultureInfo { private readonly Calendar cal; private readonly Calendar[] optionals; public PersianCulture() : this("fa-IR", true) { } public PersianCulture(string cultureName, bool useUserOverride) : base(cultureName, useUserOverride) { cal = base.OptionalCalendars[0]; var optionalCalendars = new List<Calendar>(); optionalCalendars.AddRange(base.OptionalCalendars); optionalCalendars.Insert(0, new PersianCalendar()); Type formatType = typeof(DateTimeFormatInfo); Type calendarType = typeof(Calendar); PropertyInfo idProperty = calendarType.GetProperty("ID", BindingFlags.Instance | BindingFlags.NonPublic); FieldInfo optionalCalendarfield = formatType.GetField("optionalCalendars", BindingFlags.Instance | BindingFlags.NonPublic); var newOptionalCalendarIDs = new Int32[optionalCalendars.Count]; for (int i = 0; i < newOptionalCalendarIDs.Length; i++) newOptionalCalendarIDs[i] = (Int32)idProperty.GetValue(optionalCalendars[i], null); optionalCalendarfield.SetValue(DateTimeFormat, newOptionalCalendarIDs); optionals = optionalCalendars.ToArray(); cal = optionals[0]; DateTimeFormat.Calendar = optionals[0]; DateTimeFormat.MonthNames = new[] { "فروردین", "اردیبهشت", "خرداد", "تیر", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند", "" }; DateTimeFormat.MonthGenitiveNames = new[] { "فروردین", "اردیبهشت", "خرداد", "تیر", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند", "" }; DateTimeFormat.AbbreviatedMonthNames = new[] { "فروردین", "اردیبهشت", "خرداد", "تیر", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند", "" }; DateTimeFormat.AbbreviatedMonthGenitiveNames = new[] { "فروردین", "اردیبهشت", "خرداد", "تیر", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند", "" }; DateTimeFormat.AbbreviatedDayNames = new string[] { "ی", "د", "س", "چ", "پ", "ج", "ش" }; DateTimeFormat.ShortestDayNames = new string[] { "ی", "د", "س", "چ", "پ", "ج", "ش" }; DateTimeFormat.DayNames = new string[] { "یکشنبه", "دوشنبه", "ﺳﻪشنبه", "چهارشنبه", "پنجشنبه", "جمعه", "شنبه" }; DateTimeFormat.AMDesignator = "ق.ظ"; DateTimeFormat.PMDesignator = "ب.ظ"; } public override Calendar Calendar { get { return cal; } } public override Calendar[] OptionalCalendars { get { return optionals; } } } }
و در Global.asax هم این کد رو قرار دادم:
protected void Application_BeginRequest(object sender, EventArgs e) { var persianCulture = new GSD.Globalization.PersianCulture(); System.Threading.Thread.CurrentThread.CurrentCulture = persianCulture; System.Threading.Thread.CurrentThread.CurrentUICulture = persianCulture; }
حالا تاریخ شمسی شده و مطلب هم ثبت میشه اما مشکل اینجاست که تاریخ به درستی ثبت نمیشه. الان مطلب ثبت می کنم توی دیتابیس به این صورت میاد :
که توی سایت هم به این صورت نشون میده:
یعنی اصلا تاریخ روز رو ثبت نمیکنه فقط تاریخ یک یک هزار و نهصد و نود رو ثبت میکنه
به فرموده استاد مدائنی باید به جای DateTime.Now.ToShortDateString فقط از DateTime.Now استفاده کنم اما وقتی این کار رو میکنم مطلب اصلا ثبت نمیشه و بعد از زدن کلید ثبت فقط فیلد ها مخفی میشن
لطفا راهنمایی کنید ایراد از کجاست ممنون میشم
چرا از پرشیا استفاده نمیکنید ..به نظرم اون خیلی راحته....با چند خط کد میشه تاریخ رو به شمسی گرفت و ذخیره کرد.
دوست عزیز تاحالا استفاده نکردم اگر مقاله ای هست در این باره معرفی کنید یا توضیح مختصر بدید ممنون میشم
مقاله لازم نیست .
کتابخانه پرشیا رو دانلود کنید به عنوان رفرنس به پروژه اضافه کنید
بعد فضا نام رو اضافه کنید
using Persia;
و با این کد بگیرید
Persia.SunDate dt = new SunDate(); dt = Persia.Calendar.ConvertToPersian(DateTime.Now);
مثلا بزنید
dt.weekday
یا
cmd.Parameters.AddWithValue("@dates", dt.Simple);
dt.simpple
من پرشیا رو دارم و ازش برای مشاهده تاریخ امروز استفاده کردم:
Date.InnerText = Persia.Calendar.ConvertToPersian(DateTime.Now).Persian;
منتها نمیدونم توی دستور insert که نوشتم چجوری از پرشیا استفاده کنم :|
خوب براتون نمونه نوشتم دیگه
اول هر جا میخوای اینزرت کنی
اینو بنویس
Persia.SunDate dt = new SunDate(); dt = Persia.Calendar.ConvertToPersian(DateTime.Now);
بعد با dt که داری اینزرت میکنی
مثل این
cmd.Parameters.AddWithValue("@dates", dt.Simple);
دوست گرامی یه کد ساده بهت بگم فکرکنم به درد بخوره
System.Globalization.PersianCalendar pc = new System.Globalization.PersianCalendar(); string day = DateTime.Now.DayOfWeek.ToString(); if (day == "Saturday") sp_date.InnerText = " شنبه "; if (day == "Sunday") sp_date.InnerText = " یک شنبه"; if (day == "Monday") sp_date.InnerText = " دوشنبه"; if (day == "Tuesday") sp_date.InnerText = "سه شنبه"; if (day == "Wednesday") sp_date.InnerText = "چهارشنبه"; if (day == "Thursday") sp_date.InnerText += "پنجشنبه"; if (day == "Friday") sp_date.InnerText += "جمعه"; sp_date.InnerText +=" "+ pc.GetDayOfMonth(DateTime.Now).ToString() + "-" + pc.GetMonth(DateTime.Now).ToString() + "-" + pc.GetYear(DateTime.Now).ToString() ;
سلام راحت میتونی با دو خط کد تاریخ رو ذخیره کنی
ممنون از دوستان عزیز که راهنمایی کردید اما شما راه های دیگه رو توضیح دادید. من فقط خواستم بدونم ایراد پروژه خودم کجاست که تاریخ رو اشتباه ذخیره میکنه. من تاریخ رو شمسی کردم و هیچ مشکلی هم در رابطه با شمسی کردن ندارم قبلا استاد مدائنی عزیز توضیحش رو کامل داده بودن و طبق همون روش شمسی کردم. ولی اگر تاپیک رو بخونید نوشتم مشکل اینجاست که تاریخ روز ثبت نمیشه و سال 1990 رو ثبت میکنه توی دیتابیس. قصد من رفع این مشکل هست
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)