ايران ويج

نسخه‌ی کامل: نمايش تاريخ بصورت شمسي
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2
سلام
تاريخ روزموردنظرم رادربانك اطلاعاتي بصورت Date Timeبه ميلادي ذخيره مي كنيم حال مي خواهم وقتي درفرم مربوطه اطلاعات رانمايش بدهم تاريخ بصورت شمسي باشد
مثلا تاريخ بصورت2010/05/07ذخيره شده است امادرفرم مي خواهم معادل همان روز89/02/17نمايش داده شود
کد:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;

public class PersianDate
{
    System.Globalization.PersianCalendar _PDate;
    public DateTime enDate { set { SetDate(value); } }
    string year = "";
    string _NameOFMonth = "";
    string _Month = "";
    string month
    {
        get
        {
            return _Month;
        }
        set
        {
            //
            switch (value)
            {
                case "01":
                    {
                        _NameOFMonth = "فروردین";
                        break;
                    }
                case "02":
                    {
                        _NameOFMonth = "اردیبهشت";
                        break;
                    }
                case "03":
                    {
                        _NameOFMonth = "خرداد";
                        break;
                    }
                case "04":
                    {
                        _NameOFMonth = "تیر";
                        break;
                    }
                case "05":
                    {
                        _NameOFMonth = "مرداد";
                        break;
                    }
                case "06":
                    {
                        _NameOFMonth = "شهریور";
                        break;
                    }
                case "07":
                    {
                        _NameOFMonth = "مهر";
                        break;
                    }
                case "08":
                    {
                        _NameOFMonth = "آبان";
                        break;
                    }
                case "09":
                    {
                        _NameOFMonth = "آذر";
                        break;
                    }
                case "10":
                    {
                        _NameOFMonth = "دی";
                        break;
                    }
                case "11":
                    {
                        _NameOFMonth = "بهمن";
                        break;
                    }
                case "12":
                    {
                        _NameOFMonth = "اسفند";
                        break;
                    }
            }
            _Month = value;
        }
    }
    string _Day = "";
    string dayName = "";
    string day
    {
        get
        {
            return _Day;
        }
        set
        {
            _Day = value;
        }
    }
    string _DayOfWeek = "";
    string dayOfWeek
    {
        get
        {
            return _DayOfWeek;
        }
        set
        {
            switch (value)
            {
                case "Saturday":
                    {
                        _DayOfWeek = "شنبه";
                        break;
                    }
                case "Sunday":
                    {
                        _DayOfWeek = "یکشنبه";
                        break;
                    }
                case "Monday":
                    {
                        _DayOfWeek = "دوشنبه";
                        break;
                    }
                case "Tuesday":
                    {
                        _DayOfWeek = "سه شنبه";
                        break;
                    }
                case "Wednesday":
                    {
                        _DayOfWeek = "چهارشنبه";
                        break;
                    }
                case "Thursday":
                    {
                        _DayOfWeek = "پنجشنبه";
                        break;
                    }
                case "Friday":
                    {
                        _DayOfWeek = "جمعه";
                        break;
                    }
            }
        }
    }

    public PersianDate()
    {
        _PDate = new System.Globalization.PersianCalendar();
    }
    public PersianDate(DateTime enDate)
    {
        _PDate = new System.Globalization.PersianCalendar();
        SetDate(enDate);
    }
    private void SetDate(DateTime enDate)
    {
        year = _PDate.GetYear(enDate).ToString();
        month = _PDate.GetMonth(enDate).ToString();
        day = _PDate.GetDayOfMonth(enDate).ToString();
        dayOfWeek = _PDate.GetDayOfWeek(enDate).ToString();
        if (day.Length == 1)
            day = "0" + day;
        if (month.Length == 1)
            month = "0" + month;
    }
    public string ToShortDateString(DateTime enDate)
    {
        SetDate(enDate);
        return day + "/" + month + "/" + year;
    }
    public string ToShortDate_DayString(DateTime enDate)
    {
        SetDate(enDate);
        return dayOfWeek + " " + day + "/" + month + "/" + year;
    }
    public string ToLongDateString(DateTime enDate)
    {
        SetDate(enDate);
        return dayOfWeek + " " + " " + day + " " + _NameOFMonth + " " + year;
    }

    public string ToString(DateTime dateTime)
    {
        throw new NotImplementedException();
    }
}
سلام
ببخشيدمن منظورم راخوب نرساندم جواب خوبي هم نگرفتم
مشكل من اينجاست كه ازطريق كامپونت تاريخ راكاربربصورت شمسي انتخاب مي كنه امادربانك بصورت ميلادي ثبت مي كنه
حال مي خواهم درهنگام لودصفحه ونمايش داده ها تاريخ بصورت ميلادي نمايش داده مي شود كه من مي خواهم بصورت شمسي باشد
خب مهندس کارت اشتباس
با این کار شما باید 2 تا فیلد داشته باشی اوای تاریخ میلادی و دومی تاریخ شمسی
موقع insert باید هم میلادی و هم شمسی وارد کنی تاریخها رو و موقع جستجو بر اساس میلادی جستجو کنی و شمسی رو نشون بدی

این کار یک روش پر دردسر و باعث افزونگی بانک هم میشه
شما میتونی یه کار راحتر بکین

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


تو یک تاپیکی اینو توضیح داده بودم + تابع sqlش
(سرچش پای خودت)
سلام اینکه تاریخ رو میلادی ذخیره کنی و موقع نمایش تبدیل کنی .... ایرادش چیه؟
حسین جان خودت حساب مدت زمان تبدیل تاریخ میلادی به شمسی رو تو یه query که خروجیش 1000 تا رکورد هست حساب کن+منابعی که به این علت بیهوده مصرف میشه
اگه شما این کارو رویه سرور شبکه انجام بدی که مثلا 5 تا یوزر بهش وصل بشن و واکشی بالا داشته باشن دیگه خودت حساب کن برادر
( :d میری sqlserver 2008 با پشتیبانی تاریخ فارسی نصب میکنی و دردسر نمیکشی :d )
سلام
آها از اون لحاظ بخای حساب کنی آره ، ولی اگه از LINQ to SQL استفاده بشه و بجای store procedure یا function اس کیو ال از توابع خود زبان application استفاده کنی(با وجود LINQ این امکان وجود داره) اونوقت پردازش تبدیل تاریخ میاد تحت کلاینت انجام میشه و دیگه اون مشکلی که شما گفتی نادیده گرفته میشه...
نقل قول: ( Biggrin میری sqlserver 2008 با پشتیبانی تاریخ فارسی نصب میکنی و دردسر نمیکشی Biggrin )
eee اس کیو ال از تاریخ فارسی هم پشتیبانی میکنه؟ نمیدونستم از چه نسخه ای به بعد؟
نقل قول: حسین جان خودت حساب مدت زمان تبدیل تاریخ میلادی به شمسی رو تو یه query که خروجیش 1000 تا رکورد هست حساب کن+منابعی که به این علت بیهوده مصرف میشه
اگه شما این کارو رویه سرور شبکه انجام بدی که مثلا 5 تا یوزر بهش وصل بشن و واکشی بالا داشته باشن دیگه خودت حساب کن برادر
( میری sqlserver 2008 با پشتیبانی تاریخ فارسی نصب میکنی و دردسر نمیکشی )

میشه راجب تاریخ فارسی در SQl server 2008 یه کم توضیح بدی. من دیدم فقط Collation فارسی بهش اضافه شده بود.
بعد راجب Query گرفتن هم از این روشی که گفتین توضیح میدین.

میخوام بدونم تبدیل میلادی به شمسی به نظر شما فرایند سنگینیه آن هم در Client؟
فرایند رو تحت کلاینت بیاری فقط اون بار رو از رو سرور به کلاینتها منتقل میکنی
در کلاینتها با استفاده از application شما باید تو یه حلقه تمام رکوردها رو پیمایش و روال تغییر تاریخ و زمانبر بودن به قوت خودش باقیه

از sql2005 به بعد شما میتونین یک دیتا تایپ مجازی برای خودتون ایجاد کنید با استفاده از این قابلیت شما میتونین یک دیتاتایپ برای تاریخ شمسی به sql server اضافه کنین و ازش استفاده کنین
(منظورم این بود ، تو پست 6 فکر کنم منظورمو بد رسوندم)

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

ابتدا ما فیلد تاریخ رو به صورت int در نظر بگیریم و موقع وارد کردن اطلاعات // های بین تاریخ رو برداریم یعنی 1388/01/07 رو به صورت 13880107 وارد میکنیم و با استفاده از یک تابع در سمت sql در هنگام نمایش خروجی // ها رو به خروجی اضافه می کنیم

کد:
CREATE FUNCTION separate_date(@intdate int)

RETURNS char(10)
AS
BEGIN
declare @sam char(8)
declare @dat char(10)
set @sam=convert(char(10),@intdate);
set @dat=substring(@sam,1,4)+'/'+substring(@sam,5,2)+'/'+substring(@sam,7,2)
return @dat
END
GO

چون پردازش روی فیلد عددی صورت میگیره پس طبعا سرعت بالاتری نسبت به روشهای دیگه خواهد داشت

برای استفاده از تابع فوق به صورت زیر عمل میکنیم

کد:
select dbo.separate_date(date) from tble

Date:نام فیلد تاریخ میباشد

table: نام جدول مورد نظر می باشد

توجه برای استفاده از توابعی به غیر از توابع اصلی sql قبل از استفاده باید dbo اعلان شود
مبین جان تبدیل تاریخ حتی 1000 رکود کار سنگینی نیست چون فقط یک بار اجرا میشه (در کلاینت) اما اگه این کار رو توی سرور داشته باشیم آره میشه گفت کمی سنگین میشه (اونم در مواردی که تعداد کاربران سرور انگشت شمار نباشه) ، به نظر میاد اگه این زحمت تبدیل رو بدیم به کلاینت مشکلی نباشه.
در رابطه با روش شما هم الان حضور ذهن ندارم ولی قبلا یادم هست که چند تا نقص ازش پیدا کرده بودم...

نمونه کوئری که تبدیل بر دوش کلاینته (LINQ):
کد:
DataBaseDataContext db = new DataBaseDataContext();
datagrid1.datasource=from s in db.Table where s.date=DateTime.Now() select new {miladi2shamsi(s.date) };
فرض کردیم تابع miladi2shamsi رو قبلا توی سی شارپ تعریف کردیم
نام جدولمون table
و نام کلاس پایگاه دادمون DataBaseDataContext است
صفحه‌ها: 1 2