PDA

View Full Version : نمایش تاریخ شمسی در asp.net



moeintn
شنبه 23 دی 1396, 18:37 عصر
نمایش تاریخ شمسی همیشه یکی از امکاناتی است که ما مردمان پارسی باید در پروژه استفاده کنیم ، البته در نظر بگیریم که ما فقط باید در هنگام نمایش تاریخ را به صورت شمسی نمایش دهیم ، اطلاعات ما در دیتابیس باید به صورت میلادی ذخیره شده باشد به دلایلی که در ادامه باهم برسی میکنیم.اول اینکه ما از کلاس PersianCulture استفاده میکنیم ، این کلاس در زبان سی شارپ استفاده میشه یعنی شما میتوانید در ASP.NET و ASP.NET MVC و یا در پروژه های ویندوز فرم از این کلاس استفاده کنید.
تاریخ شمسیچه دلایلی اینجا حکم فرماست که ما باید از تاریخ شمسی در دیتابیس استفاده نکنیم ؟
دلیل محکمی که میتونم براتون توضیح بدم ساعت و تاریخ ویندوز است ، و یا سرور ما : درسته ؟ این سیستم ها تاریخ را به صورت میلادی ارائه میدهند خوب ماهم باید طبق همین سیستم جلو بریم ولی توسط این کلاس میتوانیم تاریخ را در هنگام نمایش به صورت شمسی داشته باشیم.
دوم اینکه فرض کنید میخواهید در یک بازه زمانی جستجو انجام دهید ؟ مثلا اطلاعات خرید امروز ؟ میشه از تاریخ جاری سیستم از ساعت ۰۰:۰۰ تا ۲۳:۵۹ دقیقه ، خوب تاریخ سیستم میلادی است اگر اطلاعات ما به صورت شمسی در دیتابیس ثبت شده بود این کار امکان پذیر نبود و خیلی دلایل دیگه که میشه در موردش بحث کرد.میریم سراغ آموزش:
ابتدا باید کلاسی که ضمیمه شده را به پروژه خود اضافه کنید.کدش رو نیز براتون قرار دادم :



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Reflection;

namespace GSD.Globalization
{
///
<summary>
/// <Publisher>http://www.csharpoop.com</Publisher (http://www.csharpoop.com%3C/Publisher)>
/// <Author></Author>
/// </summary>

public class PersianCulture : CultureInfo
{
private readonly Calendar cal;
private readonly Calendar[] optionals;

///
<summary>
/// كد رو بخوان تا بفهمي
/// </summary>

/// <param name="cultureName">fa-IR</param>
/// <param name="useUserOverride">true</param>

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; }
}
}
}





قرار دادن کد های زیر با توجه به تکنولوژی که استفاده میکنید :ASP.NET:
در ASP.NET کد زیر را در Global.cs قرار بدید :
ابتدا باید کلاس را به پروژه خود اضافه کنید در غیر این صورت کد زیر کار نخواهد کرد.



1
2
3
4
5
6

protected void Application_BeginRequest(object sender, EventArgs e)
{
var persianCulture = new PersianCulture();
Thread.CurrentThread.CurrentCulture = persianCulture;
Thread.CurrentThread.CurrentUICulture = persianCulture;
}





در ویندوز فرم زبان سی شارپ :کد زیر را در Program.cs قرار بدید :



1
2
3

var persianCulture = new PersianCulture();
Thread.CurrentThread.CurrentCulture = persianCulture;
Thread.CurrentThread.CurrentUICulture = persianCulture;





اگر همه کارهایی که آموزش داده شد را درست انجام داده باشید باید تاریخ را شمسی در پروژه مشاهده کنید.حال میخواهیم طبق آموزشی که در خوده کلاس نیز داده شده تاریخ ها را به صورت بهینه نمایش دهیم.نمایش فقط تاریخ :



1

DateTime.Now.ToString("yyyy/MM/dd");





نمایش فقط ساعت :


1

DateTime.Now.ToString("HH:mm");








منبع : 118فایل (http://118FILE.COM)

amir.j666
چهارشنبه 22 خرداد 1398, 18:15 عصر
نمایش تاریخ شمسی همیشه یکی از امکاناتی است که ما مردمان پارسی باید در پروژه استفاده کنیم ، البته در نظر بگیریم که ما فقط باید در هنگام نمایش تاریخ را به صورت شمسی نمایش دهیم ، اطلاعات ما در دیتابیس باید به صورت میلادی ذخیره شده باشد به دلایلی که در ادامه باهم برسی میکنیم.اول اینکه ما از کلاس PersianCulture استفاده میکنیم ، این کلاس در زبان سی شارپ استفاده میشه یعنی شما میتوانید در ASP.NET و ASP.NET MVC و یا در پروژه های ویندوز فرم از این کلاس استفاده کنید.
تاریخ شمسیچه دلایلی اینجا حکم فرماست که ما باید از تاریخ شمسی در دیتابیس استفاده نکنیم ؟
دلیل محکمی که میتونم براتون توضیح بدم ساعت و تاریخ ویندوز است ، و یا سرور ما : درسته ؟ این سیستم ها تاریخ را به صورت میلادی ارائه میدهند خوب ماهم باید طبق همین سیستم جلو بریم ولی توسط این کلاس میتوانیم تاریخ را در هنگام نمایش به صورت شمسی داشته باشیم.
دوم اینکه فرض کنید میخواهید در یک بازه زمانی جستجو انجام دهید ؟ مثلا اطلاعات خرید امروز ؟ میشه از تاریخ جاری سیستم از ساعت ۰۰:۰۰ تا ۲۳:۵۹ دقیقه ، خوب تاریخ سیستم میلادی است اگر اطلاعات ما به صورت شمسی در دیتابیس ثبت شده بود این کار امکان پذیر نبود و خیلی دلایل دیگه که میشه در موردش بحث کرد.میریم سراغ آموزش:
ابتدا باید کلاسی که ضمیمه شده را به پروژه خود اضافه کنید.کدش رو نیز براتون قرار دادم :



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Reflection;

namespace GSD.Globalization
{
///
<summary>
/// <Publisher>http://www.csharpoop.com</Publisher (http://www.csharpoop.com%3C/Publisher)>
/// <Author></Author>
/// </summary>

public class PersianCulture : CultureInfo
{
private readonly Calendar cal;
private readonly Calendar[] optionals;

///
<summary>
/// كد رو بخوان تا بفهمي
/// </summary>

/// <param name="cultureName">fa-IR</param>
/// <param name="useUserOverride">true</param>

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; }
}
}
}




قرار دادن کد های زیر با توجه به تکنولوژی که استفاده میکنید :ASP.NET:
در ASP.NET کد زیر را در Global.cs قرار بدید :
ابتدا باید کلاس را به پروژه خود اضافه کنید در غیر این صورت کد زیر کار نخواهد کرد.



1
2
3
4
5
6

protected void Application_BeginRequest(object sender, EventArgs e)
{
var persianCulture = new PersianCulture();
Thread.CurrentThread.CurrentCulture = persianCulture;
Thread.CurrentThread.CurrentUICulture = persianCulture;
}




در ویندوز فرم زبان سی شارپ :کد زیر را در Program.cs قرار بدید :



1
2
3

var persianCulture = new PersianCulture();
Thread.CurrentThread.CurrentCulture = persianCulture;
Thread.CurrentThread.CurrentUICulture = persianCulture;




اگر همه کارهایی که آموزش داده شد را درست انجام داده باشید باید تاریخ را شمسی در پروژه مشاهده کنید.حال میخواهیم طبق آموزشی که در خوده کلاس نیز داده شده تاریخ ها را به صورت بهینه نمایش دهیم.نمایش فقط تاریخ :



1

DateTime.Now.ToString("yyyy/MM/dd");




نمایش فقط ساعت :


1

DateTime.Now.ToString("HH:mm");







منبع : 118فایل (http://118FILE.COM)




سلام وقت بخیر دوست عزیزم ، من تاریخ در asp.net داخل گرید ویو فارسی کردم وقتی که روی کلید سرت کلیک میکنم (مرتب سازی ) دوباره تاریخ به حالت اولیه برمیگرده لطفا کمکم کنید .

http://daymond-medrep.ir/dr%20report.aspx