مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

moonfa1392

عضویت از 1394/08/17

مشکل در ثبت تاریخ روز

  • چهارشنبه 5 اسفند 1394
  • 15:25
تشکر میکنم

سلام

این جدول دیتابیس من هست:

در یوزر کنترل این کد رو برای درج سطر در دیتابیس نوشتم:

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 استفاده کنم اما وقتی این کار رو میکنم مطلب اصلا ثبت نمیشه و بعد از زدن کلید ثبت فقط فیلد ها مخفی میشن

 

لطفا راهنمایی کنید ایراد از کجاست ممنون میشم

پاسخ های این پرسش

تعداد پاسخ ها : 9 پاسخ
کاربر سایت

Ahmad

عضویت از 1392/03/16

  • چهارشنبه 5 اسفند 1394
  • 15:37

چرا از پرشیا استفاده نمیکنید ..به نظرم اون خیلی راحته....با چند خط کد میشه تاریخ رو به شمسی گرفت و ذخیره کرد.

کاربر سایت

moonfa1392

عضویت از 1394/08/17

  • چهارشنبه 5 اسفند 1394
  • 15:47

دوست عزیز تاحالا استفاده نکردم اگر مقاله ای هست در این باره معرفی کنید یا توضیح مختصر بدید ممنون میشم

کاربر سایت

Ahmad

عضویت از 1392/03/16

  • چهارشنبه 5 اسفند 1394
  • 15:54

مقاله لازم نیست .

کتابخانه پرشیا رو دانلود کنید به عنوان رفرنس به پروژه اضافه کنید

بعد فضا نام رو اضافه کنید

using Persia;

و با این کد بگیرید

Persia.SunDate dt = new SunDate();
        dt = Persia.Calendar.ConvertToPersian(DateTime.Now);

 

مثلا بزنید

dt.weekday

یا

cmd.Parameters.AddWithValue("@dates", dt.Simple);

dt.simpple

کاربر سایت

Ahmad

عضویت از 1392/03/16

  • چهارشنبه 5 اسفند 1394
  • 15:56

اینم پرشیا

فایل های ضمیمه

کاربر سایت

moonfa1392

عضویت از 1394/08/17

  • چهارشنبه 5 اسفند 1394
  • 16:14

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

Date.InnerText = Persia.Calendar.ConvertToPersian(DateTime.Now).Persian;

منتها نمیدونم توی دستور insert که نوشتم چجوری از پرشیا استفاده کنم :|

کاربر سایت

Ahmad

عضویت از 1392/03/16

  • چهارشنبه 5 اسفند 1394
  • 17:39

خوب براتون نمونه نوشتم دیگه

اول هر جا میخوای اینزرت کنی

اینو بنویس

	
Persia.SunDate dt = new SunDate();
        dt = Persia.Calendar.ConvertToPersian(DateTime.Now);

بعد با dt که داری اینزرت میکنی

مثل این

cmd.Parameters.AddWithValue("@dates", dt.Simple);

 

کاربر سایت

ahmadi

عضویت از 1393/07/18

  • چهارشنبه 5 اسفند 1394
  • 21:32

دوست گرامی یه کد ساده بهت بگم فکرکنم به درد بخوره

    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() ;

 

کاربر سایت

jamaljaj

عضویت از 1394/03/17

  • پنجشنبه 6 اسفند 1394
  • 16:22

سلام راحت میتونی با دو خط کد تاریخ رو ذخیره کنی

 

  System.Globalization.PersianCalendar p = new System.Globalization.PersianCalendar();
       public    StringBuilder s = new StringBuilder();
      
       string time="";
           s.Append(p.GetYear(DateTime.Now));
           s.Append(" : ");
           s.Append(p.GetMonth(DateTime.Now));
           s.Append(" : ");
           s.Append(p.GetDayOfMonth(DateTime.Now));
          time = s.ToString();
     
   
            

کاربر سایت

moonfa1392

عضویت از 1394/08/17

  • جمعه 7 اسفند 1394
  • 11:28

ممنون از دوستان عزیز که راهنمایی کردید اما شما راه های دیگه رو توضیح دادید. من فقط خواستم بدونم ایراد پروژه خودم کجاست که تاریخ رو اشتباه ذخیره میکنه. من تاریخ رو شمسی کردم و هیچ مشکلی هم در رابطه با شمسی کردن ندارم قبلا استاد مدائنی عزیز توضیحش رو کامل داده بودن و طبق همون روش شمسی کردم. ولی اگر تاپیک رو بخونید نوشتم مشکل اینجاست که تاریخ روز ثبت نمیشه و سال 1990 رو ثبت میکنه توی دیتابیس. قصد من رفع این مشکل هست

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)