PDA

View Full Version : پایان مشکل تاریخ شمسی



Mahdavi
سه شنبه 18 مرداد 1384, 23:11 عصر
با سلام
مدتی هست که می بینم بحثهای زیادی در مورد تغییر تاریخ میلادی سه شمسی مطرح شده و راه حل های گوناگون.
همه این راه ها یه مشکل دارند و اون اینکه اگه در پروژه قسمتهای مختلفی داشته باشید که از تاریخ استفاده می کنند شما برای تبدیل همه اونا باید کد بنویسید. و دیده شده که بعضی ها کنترلهایی هم واسه تاریخ نوشته و می فروشند. در صورتیکه با یه تغییر کوچک در Pcal.cs که آقای امید خندان زحمت اونو کشیدند و اضافه کردن چند خط کد ساده تمام تاریخ هاتون شمسی نمایش داده میشه و شما به شکل میلادی ذخیره خواهید کرد. از خوبی های این روش اینه که دیگه نیازی نیست تاریخ رو به شکل رشته ای ذخیره کنید . بلکه چون میلادی ذخیره میشه شما خیلی راحت می تونید با اونا کار کنید.
من کد Pcal.cs رو ضمیمه می کنم که شما باید به پروژه مورد نظرتون اضافه کنید و همچنین چند خط کد زیر رو به InitializeComponent مربوط به Global.asax قرار دهید تا کل تاریخ های سیستم شما شمسی شوند و
حتی کنترل Calender خود ‍C#.
دیگه فکر کنم کسی در مورد تاریخ تاپیکی اینجا نذاره.(انشاالله):)
کد یه برنامه نمونه هم ضمیه شده است.


private void InitializeComponent()
{
System.Globalization.CultureInfo cf = new System.Globalization.CultureInfo("fa-IR");
cf.DateTimeFormat.Calendar =new System.Globalization.PersianCalendar();
cf.DateTimeFormat.MonthNames = new string[]{
"فروردین",
"اردیبهشت",
"خرداد",
"تیر",
"مرداد",
"شهریور",
"مهر",
"آبان",
"آذر",
"دی",
"بهمن" ,
"اسفند",
""};
System.Threading.Thread.CurrentThread.CurrentCultu re = cf;
this.components = new System.ComponentModel.Container();
}

Babak-Aghili
سه شنبه 18 مرداد 1384, 23:29 عصر
دست گلتون درد نکنه ..

ممنون .

Peyman_Ranjbar
چهارشنبه 19 مرداد 1384, 04:53 صبح
برای winapp این کد رو میشه استفاده کرد؟

Mahdavi
چهارشنبه 19 مرداد 1384, 08:18 صبح
بله
در winapp هم میشه . فقط با این تفاوت که کد مربوطه رو در Form1_Load فرم اصلی تون قرار بدید.
دوم اینکه بر روی کنترلهاش در حالت اصلی تاثیری نداره و مثل وب نیست.

Identifier
شنبه 23 مهر 1384, 18:27 عصر
آقای مهدوی واقعا جالب بود استفاده کردیم

rainynight
شنبه 23 مهر 1384, 23:27 عصر
میشه برای vb هم بگذارید

javad3151
چهارشنبه 04 آبان 1384, 09:54 صبح
آقای مهدوی دستتون درد نکنه ، واقعا حرف نداره
ولی من هر کاری کردم نتونستم تبدیل به vb.net کنم (با چند convertor تست کردم ولی نشد)
نمیشه یه جوری در پروژه های Vb هم ازش استفاده کرد؟

javad3151
پنج شنبه 05 آبان 1384, 12:43 عصر
من تونستم در vb ازش استفاده کنم
موقع نمایش اطلاعات مشکلی نداره ، ولی هنگام ذخیره اطلاعات همون شمسی رو ذخیره می کنه من به این صورت تاریخ رو در بانک ذخیره می کنم :


Insert Into main (in_date) values (# " & textbox1.text & "#);"

اگر میشه راهنمایی کنید.

rahele_sa
یک شنبه 11 تیر 1385, 20:21 عصر
میشه بگید از این فایل PCal.cs چگونه استفاده کنم

sh
دوشنبه 12 تیر 1385, 00:55 صبح
دیگه لازم نیست از اون فایل استفاده کنی چون توی کلاسهای دات نت 2 هستش

Mahdavi
دوشنبه 12 تیر 1385, 15:01 عصر
من تونستم در vb ازش استفاده کنم
موقع نمایش اطلاعات مشکلی نداره ، ولی هنگام ذخیره اطلاعات همون شمسی رو ذخیره می کنه من به این صورت تاریخ رو در بانک ذخیره می کنم :


Insert Into main (in_date) values (# " & textbox1.text & "#);"

اگر میشه راهنمایی کنید.

دوست عزیز شما باید قبل از ذخیره اونو به میلادی تبدیل کنید.
با استفاده از کلاس PersianCalender :



new DateTime(1385,4,12,new System.Globalization.PersianCalendar());


که شما :
1- کد رو به vb برای خودتون بنویسید.
2- به جای اعداد 1385 و 4 و 12 از محتویات اون EditBox مقادیر سال و ماه و روز رو جدا کرده و به این شکل یه Datetime میلادی بدست بیارید.
موفق باشید

Mahdavi
دوشنبه 12 تیر 1385, 15:11 عصر
دیگه لازم نیست از اون فایل استفاده کنی چون توی کلاسهای دات نت 2 هستش

بله دوست عزیز آقا شهریار
اما متاسفانه دات نت 2 مشکلش اینه که PersianCalender رو به عنوان calender برای
DateTimeFormat.Calendar قبول نمیکنه.
لذا هنوز من نتونستم از این روش تو دات نت 2 استفاده کنم

Mahdavi
دوشنبه 12 تیر 1385, 19:42 عصر
میشه بگید از این فایل PCal.cs چگونه استفاده کنم

اونو به پروژه خودتون add کنید.
به نمونه کد که اول پست گذاشتم هم نگاه کن.
همچنین میتونی بعد از ساختن object از متدهاش هم استفاده کنی.



System.Globalization.PersianCalendar pc = new System.Globalization.PersianCalendar();
pc.GetYear(DateTime.Now);


اینم یه نمونه استفاده از آن. که سال جاری رو به شمسی بر می گردونه .

mohsenna30ri
چهارشنبه 14 تیر 1385, 07:49 صبح
من وقتی این یا امثال این کد ها رو تو اکسس و ماژول می برم فونت فارسی اون به علامت سوال تبدیل می شه چرا؟

majidhb
دوشنبه 03 مهر 1385, 12:09 عصر
آیا می دانید چطور می شود تقویم فارسی را در دات نت 2 نمایش داد؟

mahdi_negahi
دوشنبه 03 مهر 1385, 13:14 عصر
این راه فقط ماله VS2003 است در همین صفحه برای asp.net2 چیزی است

saeid taheri
پنج شنبه 06 مهر 1385, 12:19 عصر
آیا ممکن نمونه vb.net را هم بذارید
با تشکر

manager
یک شنبه 19 آذر 1385, 08:50 صبح
آقا ما هم در دات نت 2 با هاش مشکل پیدا کردیم.....کسی می دونه تو دات نت 2 چه کار باید کرد ؟

manager
دوشنبه 20 آذر 1385, 00:10 صبح
دوستان کسی نمی تونه این مشکل رو تو دات نت 2 حل کنه ؟
نمی دونم چرا CultureInfo("fa-IR"( تقویم PersianCalender رو Support نمی کنه !!!!!
من یه چند ماهی هست که کد نویسی نکردم یکم تسلطم کم شده. تو دات نت 2 ما کلاس PersianCalender رو تو خود mscorelib داریم و دیگه به PCal.cs احتیاجی نیست ولی مشکل اینه که fa-IR این تقویم رو قبول نمی کنه !!!! کدهائی که می نویسم شبیه همون کدهای راه اندازی است که تو global.asax گذاشته می شه (و اول تاپیک یه اشاره بهش شده)

Please Help Me !!!:عصبانی++:

اَرژنگ
دوشنبه 20 آذر 1385, 02:51 صبح
آقا ما هم در دات نت 2 با هاش مشکل پیدا کردیم.....کسی می دونه تو دات نت 2 چه کار باید کرد ؟
http://lytopia.com/Articles/Article.aspx?id=6

manager
دوشنبه 20 آذر 1385, 06:54 صبح
http://lytopia.com/Articles/Article.aspx?id=6
------------------------------------------------------->
public DateTime DateInOtherCalendar( DateTime aDate , Calendar OtherCalender )
{
int Year = OtherCalender.GetYear(aDate);
int Month = OtherCalender.GetMonth(aDate);
int Day = OtherCalender.GetDayOfMonth(aDate);
DateTime DateInOtherCalendar = new DateTime(Year, Month, Day);
return DateInOtherCalendar;
}

////// Example of converting Iranian (Shamsi) Calender Date to Gregorian Date

private void button1_Click(object sender, EventArgs e)
{
//An Iranian Date : 19 Mehr 1359
DateTime PersianDate = new DateTime( 1359, 7, 19, new PersianCalendar() );
GregorianCalendar Gregorian = new GregorianCalendar( );

Text = DateInOtherCalendar(PersianDate, Gregorian).ToString();
}

/////Example of converting from Gregorian date to Iranian (Shamsi) calender date

private void button1_Click(object sender, EventArgs e)
{ //A Gregorain Date 25 January 2006
DateTime GregorianDate = new DateTime( 2006, 1, 25, new GregorianCalendar() );
PersianCalendar Persian = new PersianCalendar( );

Text = DateInOtherCalendar(GregorianDate, Persian).ToString();
}





دوست عزیز مثل اینکه شما مشکل رو متوجه نشدید. من می خوام کنترل تقویم CalenderControl رو شمسی کنم ! و می خوام کل Treatام رو فارسی کنم. نمی خوام عمل تبدیل تاریخ ها رو انجام بدم .!!!!!

سار
چهارشنبه 29 آذر 1385, 14:07 عصر
بارها برای همه ما برنامه نویسان وب پیش آمده که در یک صفحه وب نیاز به گرفتن تاریخ از کاربر داریم، نبودن یک تقویم شمسی که بصورت Date Picker عمل نماید، این ایده را به من داد که باید خودم دست به کار شوم. بالاخره با بررسی Date Picker های موجود، تصمیم به تغییر آن و ایجاد این تقویم که میبینید گرفتم. این برنامه اولین سری از تقویم شمسی سمت کلاینت است که بطور 100% با جاوا اسکریپت نوشته شده و بصورت انتخاب تاریخ (Date Picker) کار میکند و اون رو میتونین در هرجایی از صفحه وب تون که نیاز به گرفتن ورودی تاریخ از کاربر دارین قرار بدین و تاریخ مورد نظر را از کاربر دریافت نمایید. استفاده از این تقویم که بصورت یه فایل جاوااسکریپت به برنامه شما اضافه میشود بسیار ساده میباشد و با زدن یک لینک یا هر طوری که خودتون تعریف میکنین، این تقویم ظاهر شده و کاربر شما میتونه بجای تایپ تاریخ در فرم، روز مورد نظر خودش رو از تقویم انتخاب کنه و بصورت خودکار در فیلد شما وارد نماید. این امکان چیز جدیدی نیست و تا بحال بصورتهای مختلفی مثل کامپوننت در دلفی، کنترل ActiveX برای برنامه های ویژوال بیسیک، تقویم استاتیک در PHP و حتی بصورت یک کامپوننت که در برنامه های ASP.net استفاده کنید وجود داشته است. ولی داشتن یه تقویم به این صورت با جاوا اسکریپت که از آن به راحتی در هر صفحه و برنامه ای حتی در یه صفحه استاتیک HTML بتوان استفاده کرد تا بحال وجود نداشته. بهرحال امیدوارم از داشتن این تقویم که بصورت رایگان در اختیار شما قرار میدهم، استفاده و لذت کامل را ببرید.



متن بالا از سایت http://hoomb.dnsalias.com/index.php?page=about بود.
برید برنامه رو بگیرید و لذت ببرید.

Mahdavi
چهارشنبه 05 دی 1386, 11:15 صبح
مشکل تاریخ در asp.net 2.0 هم همچون 1.0 حل شد . یه نگاهی به این مقاله بندازید.
http://www.sayan.ir/ViewArticle.aspx?ArticleID=281

raham_panjehshahi
دوشنبه 21 مرداد 1387, 08:23 صبح
با سلام و تشکر برای برنامه جاوا اسکریپت شما هیچ لینکی وج.د نداره ، من هم شدیدا در یک پروژه به آن نیاز دارم ، ممکنه لطف کرده و آن را برای من ایمیل کنید . با تشکر فراوان
raham_panjehshahi@yahoo.com

s_juyayekar
چهارشنبه 23 مرداد 1387, 03:18 صبح
آقای مهدوی و اقعا دستتون درد نکنه!
اگه بدونین من چند وقته دنبال این تبدیل تقویم بودم!!!!
بازم ممنون!
خیلی عالی بود:تشویق::تشویق::تشویق:

hesampersian
جمعه 11 اردیبهشت 1388, 06:46 صبح
دوست عزیز سایت http://www.sayan.ir/ViewArticle.aspx?ArticleID=281 باز نمیشه، لطفا راهنمایی کنید چجوری در دات نت 2 از این کدها به درستی استفاده کنیم؟ چون الان من دانلود کردم ولی اررور میدن!

ممنون

ictfac
جمعه 11 اردیبهشت 1388, 07:53 صبح
سایت باز نمیشه لطفا آدرس دیگری اعلام کنید.

iman_22a
جمعه 11 اردیبهشت 1388, 10:40 صبح
سایت باز نمیشه لطفا آدرس دیگری اعلام کنید.

الان مدتیه که خیلی از سایتهای فارسی برای من باز نمیشن ، مثل : Blogfa ، Techno2000 ، Aviny.com و کلی سایت دیگه که الان حضور ذهن ندارم . نمیدونم جریان چیه !

taghymusavi
دوشنبه 14 اردیبهشت 1388, 20:00 عصر
سلام
مي خوام كاري كنم كه با دادن يه تاريخ شمسي روزش تو هفته رو نشون بده
لطفا راهنمايي ام كنيد.
ممنون

mhjmeshkaat
یک شنبه 17 مرداد 1389, 06:22 صبح
مدتی هست که می بینم بحثهای زیادی در مورد تغییر تاریخ میلادی سه شمسی مطرح شده و راه حل های گوناگون.
همه این راه ها یه مشکل دارند و اون اینکه ...

سلام جناب مهدوي
براي ما مبتديها ميشه يه بار توضيح بدين چطور ميشه يه كاري كرد كه ديگه مشكل تاريخ شمسي نداشته باشيم مخصوصا با برنامه نويسي توي ويژوال بيسيك. لظفا راهكارتون رو مرحله به مرحله و روشن توضيح بديد تا روش كار دستمون بياد.
بسيار متشكرم

amordad
یک شنبه 17 مرداد 1389, 07:44 صبح
با سلام این موضوع در دات نت 4 صادق نیست
همان طور که میدانید در دات نت 4 آن کلاس معروف نوشته شده توسط آقای خندان کار نمیکند و فقط تا ورژن 3.5 میتوانستیم از آن استفاده کنیم، اما ابن بار یک پکیج توسط مهندس کرامتی عرضه شده که این مشکل را حل میکند ولی فعلا فقط ایران هاست آن را پشتیبانی میکند.
البته برای این که در دات نت 4 بصورت لوکال هم بخواهید از تقویم شمسی استفاده کنید حتما باید این پکیج را نصب کنید.
جهت استفاده، کلاس مربوطه را به همراه پکیج مورد نظر جهت دانلود قرار دادم

ASP.NET2
جمعه 26 شهریور 1389, 02:38 صبح
عجیبه :متفکر:
هیچ نحوه ی استفاده ای چیزی نداره ؟این کلاس CalendarUtils.cs چیه و اون Package چیه؟

esialex
جمعه 02 مهر 1389, 10:24 صبح
سلام به همگی
میخوام مشکل تاریخ رو به صورت کلی حل کنم.
شرکت ماکروسافت یک کتابخانه تبدیل تاریخ میلادی به شمسی درست کرده که در کتابخانه ای به نام Globalization قرار دارد این کتابخانه رو در قسمت بالای برنامه(تا حد مقدور در یک کلاس بنویسید تا هر وقت نیاز داشته باشید به ان دسترسی داشته باشید) using کنید به این صورت
using System.Globalization;

اگر در کلاس نوشته اید یک متد به کلاس اضافه کنید مثلا GetCurrentDate()


public static string GetCurrentDate()

}
{

حلا درون این متد باید یک نمونه از کلاس PersianCalendar که در کتابخانه Globalization وجود دارد بسازیم به این صورت
PersianCalendar pc = new PersianCalendar();
حالا می توانیم روز و ماه و سال بدست اوریم
به این صورت
int y = pc.GetYear(DateTime.Now);
این کد سال جاری را به ما می دهد.
int m = pc.GetMonth(DateTime.Now);
این کد ماه رو به ما میدهد که اگر میخواهید ان را به حروف(فرودین، اردیبهشت و......) بنویسید ان را به صورت جدا گانه بدست اورید و در یک دستور کیس قرار دهید.
int d = pc.GetDayOfMonth(DateTime.Now);
این دستور یک روز از ماه رو می گیرد که همان روز جاری میشود متدهای دیگری هم وجود دارد که خودتون با کمی دقت می توانیم از ان ها استفاده کنید
من کد را به صورت یک کلاس نوشتم که در اختیارتون قرار می دهم
فقط شما این کدها در یک کلاس قرار داده و namespace ان را به namespace پروژه خود تغییر دهید.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Globalization;

namespace SaleSystem.Classes
{
public class MyTools
{
/// <summary>
/// برای بدست آوردن تاریخ شمسی جاری سیستم
/// </summary>
/// <returns>به صورت رشته و با اسلش</returns>
public static string GetCurrentDate()
{
PersianCalendar pc = new PersianCalendar();
int y = pc.GetYear(DateTime.Now);
int m = pc.GetMonth(DateTime.Now);
int d = pc.GetDayOfMonth(DateTime.Now);

string s = "";
s += y + "/";
if (m < 10)
s += "0";

s += m + "/";

if (d < 10)
s += "0";

s += d;

return s;
}
}
}

نحوه فراخوانی این کد در برنامه :
چون متد این کلاس از نوع static تعریف شده دیگه نیاز نیست از ان یه نمونه بسازیم و به این صورت عمل میکنیم.
txtDate.Text = MyTools.GetCurrentDate();
من ان را درون textbox قرار داده ام.و نتیجه به این صورت است :1389/07/02
این کلاس رو میتوانیم در ASP.NET و C#‎ وvb.net استفاده کنید هیچ فرقی نمیکند با هیچ گونه تغییری
امیدوارم که تونسته باشم کمکی کرده باشم اگر مشکلی در برنامه نویسی مخصوصا در C#‎ داشتید حتما در یک تاپیک بنویسید بعد ادرس ان تاپیک رو برای من ایمیل کنید (esialex_4u@yahoo.com) خوشحال میشم بتونم کمکی کنم.

Software.Student2010
یک شنبه 21 آذر 1389, 21:29 عصر
سلام قربان

آقا من می خوام تو دیتاباس ذخیره کنم. با این روش مهندس کرامتی.

چی جوری این کار انجام میشه؟ فیلد dateTime در نظر گرفته بشه؟ چه کنیم

na3er-faraji
یک شنبه 21 آذر 1389, 22:43 عصر
دوستان. من به این روش نیاز دارم. کد رو هم به global.ascx اضافه کردم . اما این خط خطا میده. کسی میتونه راهنمایی کنه؟؟؟


this.components = new System.ComponentModel.Container();

cjNet
دوشنبه 22 آذر 1389, 00:16 صبح
سلام به همه دوستان .

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


using System;
using System.Data;
using System.Configuration;
using System.Web;

using System.Globalization;


public class PersianDate
{
static PersianCalendar pc=new PersianCalendar();
static DateTime dt = DateTime.Now;

static PersianCalendar pc_1 = new PersianCalendar();
static DateTime dt_1 = DateTime.Now;

public PersianDate()
{

}
// -----------------------------------------------------
public static string ShamsiDate()
{
string year, month, day;
//return (pc.GetYear(dt) + "/" + pc.GetMonth(dt) + "/" + pc.GetDayOfMonth(dt));
day = pc.GetDayOfMonth(dt).ToString(); ;
if (pc.GetDayOfMonth(dt) < 10)
{
day = "0" + pc.GetDayOfMonth(dt).ToString();
}
month= pc.GetMonth(dt).ToString();
if (pc.GetMonth(dt) < 10)
{
month = "0" + pc.GetMonth(dt).ToString();
}
year=pc.GetYear(dt).ToString();

return (day+"/"+ month + "/" +year);
}

public static long NumericDate()
{
string strYear, strMonth, StrDay;

int year=pc_1.GetYear(dt_1);
int month=pc_1.GetMonth(dt_1);
int day=pc_1.GetDayOfMonth(dt_1);

strYear=year.ToString();

if (month < 10)
{
strMonth = "0" + month.ToString();
}
else
strMonth = month.ToString();

if (day < 10)
{
StrDay = "0" + day.ToString();
}
else
StrDay = day.ToString();

string temp = strYear + strMonth + StrDay;
long date = long.Parse(temp);


return date;
}

public static int GetYear()
{
int year = pc_1.GetYear(dt_1);
return year;
}

public static int GetMonth()
{
int month = pc_1.GetMonth(dt_1);
return month;
}

public static int GetDay()
{
int day = pc_1.GetDayOfMonth(dt_1);
return day;
}
}

امیدوارم مفید باشه ...

na3er-faraji
دوشنبه 22 آذر 1389, 10:40 صبح
عزیزم بنده مشکلی با کلاس های کار با تاریخ شمسی ندارم. فقط میخواستم این روشی که دوستمون گفتن رو انجام بدم که اتوماتیک همه چیز به صورت شمسی نمایش داده بشه. حتی کنترل تقویم.