PDA

View Full Version : سوال: مشکل در تاریخ ارسال پست



moonfa1392
چهارشنبه 05 اسفند 1394, 07: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 رو می نویسم پست ارسال نمیشه. ارور هم نمیده اما پست ثبت نمیشه

لطفا راهنمایی کنید ممنون میشم

malloc
چهارشنبه 05 اسفند 1394, 08:41 صبح
شما میخوای تاریخ شمسی توی دیتابیس ذخیره کنی ؟

korosh00
پنج شنبه 06 اسفند 1394, 10:57 صبح
تاریخ اگه شمسی هست نوعش باید nvarchar باشه تا ذخیره بشه .
اونم از همین موارد خود ای اس پی استفاده بشه بهتر است . البته اگه پروژه خیلی سنگین است بهتره در قالب میلادی ذخیره بشه و موقع خوندن و این موارد تبدیل بشه به شمسی