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

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

کاربر سایت

kaveh.norozi

عضویت از 1394/11/30

مشکل تاریخ میلادی و شمسی

  • دوشنبه 26 تیر 1396
  • 13:30
تشکر میکنم

سلام

من تاریخ شمسی میخام تو سیستم ذخیره کنم ولی وقتی پابلیش میکنم تاریخ میلادی نشون داده میشه!!!

تو سیستم خودم بصورت شمسیه!!!!

من گزینه Region سرور رو هم Iran و Persian گذاشتم ولی تاریخ رو بصورت میلادی نشون میده

در ضمن کلاس PersianCulture هم تو پروژه ام هست

و اینم اضافه کردم تو پروژه

    public static string ToPersianDate( this DateTime t)
        {
            System.Globalization.PersianCalendar pc = new System.Globalization.PersianCalendar();
            return string.Format("{0}/{1}/{2}", pc.GetYear(t).ToString(), pc.GetMonth(t).ToString(), pc.GetDayOfMonth(t).ToString());
        }

تاریخ رو بصورت Session ارسال میکنم بصورت زیر

System.Web.HttpContext.Current.Session["TodayDate"] = DateTime.Now.ToString("yyy/MM/dd");

دریافت هم بصورت:"

var today = '@Session["TodayDate"]';
        
        
        $("#DateCreate").val(today);

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

گلاس persianCulture بپیوست می باشد

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

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

kaveh.norozi

عضویت از 1394/11/30

  • دوشنبه 26 تیر 1396
  • 13:37

کلاس persianCulture

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)
        {
            //Temporary Value for cal.
            cal = base.OptionalCalendars[0];

            //populating new list of optional calendars.
            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);

            //populating new list of optional calendar ids
            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 = "ب.ظ";

            /*
            DateTimeFormat.ShortDatePattern = "yyyy/MM/dd";
            DateTimeFormat.LongDatePattern = "yyyy/MM/dd";
            
            DateTimeFormat.SetAllDateTimePatterns(new[] {"yyyy/MM/dd"}, 'd');
            DateTimeFormat.SetAllDateTimePatterns(new[] {"dddd, dd MMMM yyyy"}, 'D');
            DateTimeFormat.SetAllDateTimePatterns(new[] {"yyyy MMMM"}, 'y');
            DateTimeFormat.SetAllDateTimePatterns(new[] {"yyyy MMMM"}, 'Y');
             */

        }

        public override Calendar Calendar
        {
            get { return cal; }
        }

        public override Calendar[] OptionalCalendars
        {
            get { return optionals; }
        }

        internal static DateTime PersianToGregorianUS(DateTime date)
        {
            throw new NotImplementedException();
        }
    }
}

کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • دوشنبه 26 تیر 1396
  • 15:16

شما مستقیم از خود Persian استفاده کنید

public static string ToPersianDate( this DateTime t)
    {
        System.Globalization.PersianCalendar pc = new System.Globalization.PersianCalendar();
        return string.Format("{0}/{1}/{2}", pc.GetYear(t).ToString(), pc.GetMonth(t).ToString(), pc.GetDayOfMonth(t).ToString());
    }

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

بعد موقع نمایش خود PersianCulture براتون شمسی میکنه

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

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

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

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