دوست عزیز این dll که با سورس اینجا گذاشته شده ،با استفاده از Persiancalnder خوده دات ایجاد شده ..... سال کبیسه هم در نظر میگیره .
Printable View
سلام دوتان عزيز
از دوست گرامي كه زحمت اين تاپيك رو كشيده و اين dll رو آماده كرده متشكرم . اگه ممكنه اين دوست عزيز منو با اين آيدي Add كنه تا بنونيم راحتتر راجع به افزودن Datetimepicker فارسي به اين Dll صحبت كنيم
براي تمامي دوستان آرزوي موفقيت دارم.
اگه دوستان هم در زمينه DataBase و مخصوصا Sql Server امري داشتن در خدمتم.
shahabsaed@yahoo.com
با عرض سلام خدمت دوستان
می خواستم بدونم چه جوری میشه توی application یک تقویم فارسی نمایش داد ؟
سلام به همگي
مختصر و مفيد مي گم. من فايل مربوطه رو دانلود كردم و بع عنوان رفرنس هم به پروژه اضافه كردم. (دارم asp.net مي نويسم) الآن مي خوام تاريخ توي يك Label بهم نشون داده بشه اما بعد از اجرا علامت / را نميگذاره چكار بايد بكنم؟
ممنون
Imports farhaniPersianDate
Partial Class MasterPage2
Inherits System.Web.UI.MasterPage
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim perdate As New farhaniPersianDate.cDate
perdate.displyFormat = "امروز:;yy;mm;dd;dn"
perdate.separatorChar = "/"
Dim dat As String = perdate.getPersianDate()
Label1.Text = dat
End Sub
End Class
خوب شما بش نگفتیت که براتون seprator بزاره
امروز;/;
سلام
آیا تقویم فارسی که بصورت کنترل تقویم نمایش داده بشه
سلام آقاي فرهاني .
من از كامپونت شما استفاده كردم . ولي يه مشكل در تبديل تاريخ ميلادي به شمسي وجود دارد كه اگر رفع شود ممنون ميشم .
من با استفاده از كامپونت شما تاريخ ميلادي سرور را گرفته و به شمسي تبديل كرده و در Textbox نمايش ميدهم . مثلاً اين 2008/11/30 09:00:00 ب.ظ تبديل ميشود به 1387/09/10 و نمايش پيدا ميكند در تكست .
سپس با زدن يك دكمه عمليات فوق بر عكس شده يعني 1387/09/10 تبديل ميشود به 2008/11/30 09:00:00 ب.ظ و در بانك ذخيره ميشود . حال براي نمايش دوباره تاريخ به صورت شمسي من تاريخ درج شده ميلادي را از بانك گرفته و به شمسي تبديل ميكنم . ولي مشكلي كه وجود دارد اين است كه تاريخ يك روز زود تر نمايش پيدا ميكند يعني مينويسد . تاريخ : دوشنبه 11 آذر 1387 ساعت : 9:00:00 PM .
اين هم تابع اي كه با استفاده از كتابخانه شما نوشته شده است كه تاريخ ميلادي را گرفته و به شمسي تبديل ميكند و لي همين طور كه گفتم يك روز تاريخ را جلو ميزنه .
public string ChangeDate(string Date)
{
Farhani.PersianDate.PerDate pc = new Farhani.PersianDate.PerDate();
pc.GetPersianDate(Convert.ToDateTime(Date));
return pc.DayOfWeek.ToString() + " " + pc.Day.ToString() + " " + pc.MonthName.ToString() + " " + pc.Year.ToString();
}
سلام آقای فرهانی.
می گم اگه خود تاریخ میلادی رو هم اضافه کنید به تاریخ هاش دیگه توووپ میشه.چون خود DateTime مثلا MonthName نداره.
این مشکل برمیگرده به Daylight ولی این مشکل رو یه جورایی حل کردم . نمیدونم شما از کدوم نسخه دارید استفاده میکنید .برای همین بهتره که از این dll استفاده کنی ،تست کن اگر مشکل داشت بهم خبر بده تا مشکلشو برطرف کنم .
دوست عزیز برای تاریخ میلادی از form های مختلف خوده دات نت میتونی استفاده کنی ، سرچ کنی پیدا میکنی .
سلام. نه DLL شما مسکلی نداره ، ممنون. مشکل من با تابع GetDateTimeFormats خود دات نت هست که توی هیچ فرمتیش نام ماه رو بصورت کامل مثلا December نشون نمیده. تنها بصورت کوتاه 3 حرفی مثلا Nov یا Dec نشون میده. ظاهرا 36 فرمت هم بیشتر نداره. ممنون
هرچی هست ، مشکل سر این ساعت هست . باید یکسری اطلاعات بدست بیاریم که چرا این مشل پیش میاد . متاسفانه چون دسترسی به سایتتون ندارم نمیتونم ریز بشم ، ولی اگر لفط کنید خودتون یکسری تست ها رو انجام بدید ممنون میشیم ، شاید اصلاً یک باگ باشه که من متوجه اون نشدم .
Farhani.PersianDate.PerDate myDate = new Farhani.PersianDate.PerDate();
Response.Write("Perdate = " + myDate.GetPersianDate() + "<br />");
DateTime IranTime = new DateTime();
IranTime=DateTime.Now.ToUniversalTime().AddHours(3 ).AddMinutes(30);
Response.Write("ServerTime= " +IranTime.ToString() + "<br />");
با استفاده از این کد ببین خروجی چی بهت میده ، این کد فقط ساعت سیستم را به GMT برمیگردونه ، حالا اگر ساعت که برگشت داده شده با ساعت محلی یکی بود اون موقعه مشکل جایی دیگه هست
ممنون از شما
من میخوام اختلاف دو تاریخ شمسی رو بدست بیارم ولی تو تاریخ ماههایی که 30 یا 31 ندارن مشکل ایجاد میکنه
اگه اشتباه میکنم راهنماییم کنین
البته من از DateDiff استفاده کردم اگه با توابع شما میشه کدش رو برام بذارید
از عملگر - (منها) استفاده کنید . تابع خاصی نداره
اول مي خواستم بابت زحمتي كه كشيديد ازتون تشكر كنم، واقعا كامپوننت بدرد بخوريه:تشویق: ولي تو كد هاي مربوط به سربارگذاري اپراتورها به نظرم مشكل وجود داره به طور مثال در مورد اپراتور نامساوي كد فعلي به اين صورته
public static bool operator !=(PerDate firstPersianDate, PerDate otherPersianDate)كه از اونجايي كه وقتي هر جزء (روز، ماه يا سال) دو تاريخ با هم مساوي نباشند اونوقت خود دو تاريخ هم با هم مساوي نيستند پس كد فوق بايد به صورت زير اصلاح بشه
{
if (firstPersianDate.Day != otherPersianDate.Day)
if (firstPersianDate.Month != otherPersianDate.Month)
if (firstPersianDate.Year != otherPersianDate.Year)
return true;
return false;
}
public static bool operator !=(PerDate firstPersianDate, PerDate otherPersianDate)
{
if (firstPersianDate.Day != otherPersianDate.Day ||
firstPersianDate.Month != otherPersianDate.Month ||
firstPersianDate.Year != otherPersianDate.Year)
return true;
else
return false;
}
البته با اجازه من يه سري بهينه سازياي ديگه هم تو كد شما انجام دادام، خوب فكر كنم خوبي پروژه هاي اپن سورس همينه ديگه، اگه خواستيد اونا رو هم براتون ميذارم:لبخندساده:
موفق باشيد.
دوست عزیز لطف کنید که تغییرات رو پابلیش کنید تا دوستان استفاده کنن
در مورد اپراتور < جاي دستور مقايسه ماه و روز بايد جابجا شود
public static bool operator >(PerDate firstPersianDate, PerDate otherPersianDate)كد اصلاح شده
{
if (firstPersianDate.Year > otherPersianDate.Year)
return true;
if (firstPersianDate.Day > otherPersianDate.Day)
return true;
if (firstPersianDate.Month > otherPersianDate.Month)
return true;
return false;
}
public static bool operator >(PerDate firstPersianDate, PerDate otherPersianDate)
{
if (firstPersianDate.Year > otherPersianDate.Year)
return true;
if (firstPersianDate.Month > otherPersianDate.Month)
return true;
if (firstPersianDate.Day > otherPersianDate.Day)
return true;
return false;
}
در مورد متد IsValidDate مقايسه دوم day>31 لزومي ندارد چرا كه تو دستور if قبلي اين مقايسه انجام شده اين مطلب در مورد مقايسه دوم day>30 هم صادقه.
public Boolean IsValidDate(String date)كد بهينه شده
{
if (!IsFullDate(date))
date = FullDate(date);
if (date.Length < 10)
throw new InvalidDateException("تاریخ وارد شده معتبر نیست");
int year = int.Parse(date.Substring(0, 4), CultureInfo.InvariantCulture);
int month = int.Parse(date.Substring(5, 2), CultureInfo.InvariantCulture);
int day = int.Parse(date.Substring(8, 2), CultureInfo.InvariantCulture);
if (year < 0 || month > 12 || month < 0 || day < 0 || day > 31)
return false;
if (month <= 6 && day > 31)
return false;
if (month >= 7 && day > 30)
return false;
if (month == 12 && day > 29)
if (!pcMydate.IsLeapYear(year))
return false;
else
if (day > 30)
return false;
return true;
}
public Boolean IsValidDate(String date)البته اين باگ نيست، فقط اين تغييرات باعث بهينه شدن كد ميشه.
{
if (!IsFullDate(date))
date = FullDate(date);
if (date.Length < 10)
throw new InvalidDateException("تاریخ وارد شده معتبر نیست");
int year = int.Parse(date.Substring(0, 4), CultureInfo.InvariantCulture);
int month = int.Parse(date.Substring(5, 2), CultureInfo.InvariantCulture);
int day = int.Parse(date.Substring(8, 2), CultureInfo.InvariantCulture);
if (year < 0 || month > 12 || month < 0 || day < 0 || day > 31)
return false;
//if (month <= 6 && day > 31) مقايسه تكراري
// return false;
if (month >= 7 && day > 30)
return false;
if (month == 12 && day > 29)
if (!pcMydate.IsLeapYear(year))
return false;
//else
// if (day > 30) مقايسه تكراري
// return false;
return true;
}
سلام دوستان
دست آقای فرهانی درد نکنه ، یه سوال:
میشه کاری کرد که با استفاده از تاریخ شمسی مثلا 1387/03/11 روز هفته رو بدست آورد،یعنی بگه چندشنبست؟
ممنون میشم راهنماییم کنید ;)
خوب بدش به تابع و dayname رو بگیر
میشه بگید چجوری؟
سلام و با تشکر
19 را نونزدهم گرفته اید.
با سلام
سورس کد تصحیح شده
مشکلش چی بوده که تصحیح کردید ؟
ممنون از فایل مفیدی که اینجا گذاشتید.من نمی دونم از این کامپوننت رو چه طوری باید در یه وب سایت جواب بگیرم.. به فایل کلاسم اضافش کردم و در صفحه ای که می خوام ازاین کامپوننت استفاده کنم، این کد رو به قسمت سورسش اضافه می کنم:<%@ Register Assembly="FarhaniPersianDate" Namespace="Farhani.PersianDate" TagPrefix="custom" %>و موقع استفاده هم این کد رو می نویسم:<custom:FarhaniPersianDate ID="FarhaniPersianDate1" runat="server" />چه طوری ازش استفاده کنم؟
سلام
من به این شکل از این کلاس استفاده کردم اما روز رو یکی جلوتر نشان می ده به طور مثال امروز 24 هست در خروجی 25 نشان میده من به این شکل استفاده کردم :
PerDate date = new PerDate();
lblDateYear.Text = date.Year.ToString();
lblDateMonth.Text = date.Month.ToString();
lblDateDays.Text = date.Day.ToString();
با تشکر از آقای فراهانی
ولی یه مشکلی وجود داره
تو سال 90 یه روز عقبه.
با سلام
دستتون درد نکنه
میشه بفرمایین چطوری میشه با داشتن تاریخ تولد یه نفر سنش رو بدست اورد البته با استفاده از این برنامه
ممنون من هنوز اینو که فرمودید امتحان نکردم! یعنی بدون نیاز به تبدیل دو تا تاریخ به عدد؟ متغیرهامون از چه نوعی باشن؟ خروجی چی میشه؟ من برا اینکار اختلاف دو تا تاریخ رو بدست آوردم با استفاده از توابع این برنامه سپس او رو به روز -ماه-سال تبدیل کردم فقط نمی دونم چند سال کبیسه بین دو تا تاریخ بوده که اونا رو حساب کنم؟
امتحان هم کردم نشد 2تا متغیر تاریخ گرفتم ارور داد دوتا textbox رو گذاشتم بازم ارور داد. میشه بیشتر راهنمایی بفرمایید. واقعا نمی دونم کجا رو اشتباه میکنم؟
هر موقع میخام چک کنم تاریخ درست وارد شده یا نه این اشکار رو میده
{"تاریخ وارد شده معتبر نیست"}
تو برنامه از این دستور استفاده کردم:
Farhani.PersianDate.PerDate pd1 = new Farhani.PersianDate.PerDate();
pd1.SeparatorChar = '/';
if ((pd1.IsValidDate(textBox2.Text)))
{
MessageBox.Show("تاریخ درست است ");
}
مبشه راهنمایی بفرمایید
سلام
با تشکر فراوان از آقای فراهانی که زحمت کشیدند و این dll رو تهیه کردند.
من می خواستم با دادن یک تاریخ به برنامه متوجه بشم که چند شنبه بوده است. ولی dll با تاریخ جاری سیستم کار میکنه. چطور میشه تاریخ خاصی رو به اون ارسال کرد که با اون تاریخ کار کنه.
با تشکر
[QUOTE=mahdi_farhani;1259399]آخرین نسخه رو استفاده کنید ، الان تمام سیستم های من دارن از این استفاده میکنند و مشکل ندارند
آخرین نسخه؟؟
همه رو دانلود کردم ولی مشکل پا برجاست.اگه امکانش هست یه لینک به عنوان آخرین نسخه بدید تا دانلود کنم.
مرسی
من آخرین نسخه رو گرفتم و کار هم میکنه بجز توابع مقایسه ای
تو فایل Xml توضیحاتش رو دیدم ولی تو کلاس Cdate اصلا همچین متدهایی وجود نداره
سلام دوستان .
من فکر کنم که این مشکل خیلی وقت پیش حل شده.
یه نمونه کامل براتون گزاشتم. همه چیز داره . حتی DatePicker و تبدیل عدد به حروف و . . . . .
امیدوارم خوشتون بیاد
+سورس برنامه
نکته : فقط در دات نت 3.5 قابل استفاده است
دوست عزیز دستورات برای تبدیل تاریخ ها چیه؟
با تشکر
سلام آقای فراهانی
این د ال ال شما می تونه اختلاف ساعت را محاسبه کنه و ساعت سیستم را تنظیم کنه.
با سلام
نمي دونم اين برنامه اين كار رو انجام ميده يا نه!
اختلاف بين دو تاريخ شمسي رو ميتونيد ابتدا به ميلادي تبديل كنيد و سپس براي بدست آوردن اختلاف از توابع تاريخ هم استفاده كنيد توابع .net براي كار با تاريخ كامل هستن
ساعت سيستم رو كه خودتون با يه دستور ساده ميتونيد عوض كنيد نيازي به استفاده از اين برنامه نيست ديگه
آقا یکی بهم توضیح بده قدم به قدم.
من رفرنس رو اضافه کردم و farhaniPersianDate.dll به فوادر bin اضافه شد و در صفحه namespace رو هم اضافه کردم.
حالا یک لیبل دارم و میخوام تاریخ به این صورت در لیبیل نمایش داده بشه:
امروز سه شنبه 15 فروردین 1391 ، ساعت 02:19 قبل از ظهر
این چجوری انجام بدم کدش رو در C# ؟؟؟
سلام دوست عزیز ، جوابتون رو میتونید تو پست شماره 1 قسمت DisplayFormat ببینید.
با عرض سلام خدمت دوستان گرامی
میشه یه نمونه کد قرار بدین
که فرضا تاریخ حال حاضر سیستم رو بگیره و 18 ماه ازش کم کنه
طبق فرموده دوستمون آقای فرهانی که تو پست دوم برای کم کردن ماه گفته بودن بنده از این دستور استفاده کردم
ولی نشد که بشه
Farhani.PersianDate.PerDate perDat = new Farhani.PersianDate.PerDate();
perDat.Today.ToString();
perDat = perDat << 18;
سلام مجدد به دوستان
من جوابمو گرفتم البته به روش خودم واسه دوستانی که ممکنه نیاز داشته باشن
string str, s1, s2, s3,sn,sr;
System.Globalization.PersianCalendar _pc = new System.Globalization.PersianCalendar();
DateTime dt = System.DateTime.Today;
System.Globalization.CultureInfo culture = new System.Globalization.CultureInfo("ja-JP");
dr = con.Reader("select modat from modat_duty");
if (dr.HasRows)
{
dr.Read();
string x = dr["modat"].ToString();
int x1=Convert.ToInt32(x);
dt = dt.AddMonths(-x1);
dt.ToShortDateString();
sr= dt.ToString("d", culture);
str = sr;
// MessageBox.Show(sr);
s1 = str.Substring(0, 4);
s2 = str.Substring(5, 2);
s3 = str.Substring(8, 2);
DateTime _userdate = new DateTime(int.Parse(s1), int.Parse(s2), int.Parse(s3));
int PersianDay = _pc.GetDayOfMonth(_userdate);
int PersianMonth = _pc.GetMonth(_userdate);
int PersianYear = _pc.GetYear(_userdate);
sn = string.Format("{0}/{1}/{2}", PersianYear, PersianMonth,PersianDay);
}
با سلام!
به چه صورت می توان یک تاریخ شمسی به یک متغیر از این کلاس انتساب داد؟
برای مثال دستورات زیر تاریخ رابه صورت میلادی به متغیر انتساب میدهد، اما اگر بخواهیم تاریخ شمسی را به متغیر منتسب کنیم به چه صورت انجام می شود؟؟؟؟
farhaniPersianDate.cDate perDate = new farhaniPersianDate.cDate();
DateTime d = DateTime.Parse("2011 / 06 / 22");
string s = perDate.getPersianDate(d);
از خاصیت CurrentDate استفاده کنید و تاریخ شمسی را انتساب بدید و بعد از آن حتماً تابع Calculte را فراخوانی کنید تا محاسبات مجدداً انجام شود
در ضمن آخرین نسخه به پست اول اضافه شد
با تشکر از آقای فراهانی عزیز بخاطر تهیه و پشتیبانی این محصول با ارزشی که در اختیار عموم قراردادند.
چندتا پیشنهاد داشتم خدمت آقای فراهانی:
1- اگه امکانش باشه فقط تو پست اول لینک آخرین ورژنها برای دانلود باشه و لینک دانلود از بقیه پست ها حذف بشه.
2- تو این چندسالی که این پست راه اندازی شده راهنمایی های زیادی انجام شده اگه امکان داشته باشه یه فایل راهنما بصورت ورد یا pdf کنار لینک دانلود قرارداده بشه بهتر کمک میکنه.
3- یه برنامه تهیه بشه که تمامی تابع های استفاده شده در این کلاس در اون استفاده بشه تا کاربران بتونن از مثالهای اون استفاده کنن.
باز هم از آقای فراهانی تشکر ویژه دارم.
همیشه موفق و سربلند باشید
سلام دوست عزیز واقعا دستت درد نکنه
من یکجا بمشکل برخورد کردم یعنی نتونستم کدشو درست بنویسم اونم اینکه نمیتونم از تاریخ امروز مثلا 7 روز کم کنم اگر میشه یه راهنمایی بفرمائید بازم ممنونم