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

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

آموزشگاه برنامه نویسان

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

دوشنبه, 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 بپیوست می باشد

آکادمی برنامه نویسان تلگرام برنامه نویسان
دوشنبه, 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();
        }
    }
}

کسانی که از این پست تشکر کرده اند :
دوشنبه, 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 براتون شمسی میکنه

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

ارسال پاسخ برای این تاپیک

ارسال پاسخ مخصوص اعضا سایت می باشد ! میتوانید با حساب کاربری خود وارد سایت شده یا ثبت نام کنید