moonfa1392
چهارشنبه 05 اسفند 1394, 08:49 صبح
سلام وقت بخیر
جدول دیتابیس من به این صورت هست:
139260
تاریخ رو datetime گذاشتم
حالا در یوزرکنترل این دستور رو برای ثبت پست جدید نوشتم:
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.a spx')",
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.CurrentCultu re = persianCulture;
System.Threading.Thread.CurrentThread.CurrentUICul ture = persianCulture;
}
الان تاریخ شمسی شده اما مشکل اینجاست که تاریخ درست ذخیره نمیشه. مثلا الان پست رو درج میکنم تاریخ سال 1278 ثبت میشه!!!!!
میدونم که مشکل از کجاست. درواقع من باید به جای DateTime.Now.ToShortDateString فقط از DateTime.Now استفاده کنم تا درست بشه اما وقتی فقط DateTime.Now رو می نویسم پست ارسال نمیشه. ارور هم نمیده اما پست ثبت نمیشه
لطفا راهنمایی کنید ممنون میشم
جدول دیتابیس من به این صورت هست:
139260
تاریخ رو datetime گذاشتم
حالا در یوزرکنترل این دستور رو برای ثبت پست جدید نوشتم:
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.a spx')",
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.CurrentCultu re = persianCulture;
System.Threading.Thread.CurrentThread.CurrentUICul ture = persianCulture;
}
الان تاریخ شمسی شده اما مشکل اینجاست که تاریخ درست ذخیره نمیشه. مثلا الان پست رو درج میکنم تاریخ سال 1278 ثبت میشه!!!!!
میدونم که مشکل از کجاست. درواقع من باید به جای DateTime.Now.ToShortDateString فقط از DateTime.Now استفاده کنم تا درست بشه اما وقتی فقط DateTime.Now رو می نویسم پست ارسال نمیشه. ارور هم نمیده اما پست ثبت نمیشه
لطفا راهنمایی کنید ممنون میشم