PDA

View Full Version : سوال: تبدیل تاریخ شمسی به میلادی در کلاس



mahan0o0
یک شنبه 27 اردیبهشت 1394, 07:52 صبح
سلام دوستان
من برای تبدیل تاریخ از شمسی به میلادی از کد زیر استفاده می کنم و هر جا که نیاز باشه تاریخ رو از کاربر به شمسی بگیره و به میلادی توی دیتابیس ذخیره کنه از این کد استفاده می کنم. به دلیل اینکه زیاد از این کد توی برنامم استفاده می کنم می خوام این کد رو توی یک کلاس بزارم و هر جای برنامه که نیاز بود کلاس رو فراخوانی کنم. ممنون میشم اگه دوستان راهنمایی کنند که توی کلاس کدم به چه شکل می شه و زمانی هم که کلاس رو فراخوانی می کنم چطور باید از این کد استفاده کنم. اگه هم روش بهتری برای تبدیل تاریخ شمسی به میلادی دارند استفاده می شه ممنون می شم راهنمایی کنید البته مشکلی که توی استفاده از کلاس هم دارم می خوام بدونم به چه شکل می شه. با تشکر فراوان


int yyyy, mm, dd;
PersianCalendar ps = new PersianCalendar();
yyyy = Int32.Parse(this.faDatePicker1.Text.Substring(0, 4));
mm = Int32.Parse(this.faDatePicker1.Text.Substring(5, 2));
dd = Int32.Parse(this.faDatePicker1.Text.Substring(8, 2));
tb.birthdate = Convert.ToDateTime(ps.ToDateTime(yyyy, mm, dd, 0, 0, 0, 0));

salibsatan
یک شنبه 27 اردیبهشت 1394, 09:12 صبح
برای تبدیل که هزار مدل کلاس و تابع توی سایت هست.یه سرچ سی ثانیه ای شما رو به جواب بهینه می رسونه
در مورد کلاس
namespace BLAHBLAH{
class URCLASS
{
}
}
کلیک راست روی پروژه.add new class. دقت کن نیم اسپیس کلاست و نرم افزارت یکی باشن.بعد هم که کلاس رو ساختی، یه تابع استاتیک با ورودی و خروجی مشخص تعریف کن.مثلا یک تابع که استرینگ بگیره و datetime برگردونه

mahan0o0
یک شنبه 27 اردیبهشت 1394, 09:23 صبح
برای تبدیل که هزار مدل کلاس و تابع توی سایت هست.یه سرچ سی ثانیه ای شما رو به جواب بهینه می رسونه
در مورد کلاس
namespace BLAHBLAH{
class URCLASS
{
}
}
کلیک راست روی پروژه.add new class. دقت کن نیم اسپیس کلاست و نرم افزارت یکی باشن.بعد هم که کلاس رو ساختی، یه تابع استاتیک با ورودی و خروجی مشخص تعریف کن.مثلا یک تابع که استرینگ بگیره و datetime برگردونه

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

Fotofan
یک شنبه 27 اردیبهشت 1394, 09:39 صبح
سلام به این شکل ازش استفاده بکنید.

یه نمونه ازش بسازید:


URCLASS a= new URCLASS();


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


a.toshamsi(date);

Fotofan
یک شنبه 27 اردیبهشت 1394, 09:44 صبح
البته یه کاری بکن بهترخ. به صورت ExtentionMethod این کارو انجام بده. خییلی آسون تره.

اگه با متد ToString() برای تبدیل به رشته کارکرده باشی می فهمی منظورم چیه.

مثلا


DateTime dt= new DateTime();

dt= DateTime.Now.Date.ToShamsi();




که ToShamsi همون ExtentionMethod ت میشه.مطالب زیادی وجود داره.البته اگه بازم خواستی بدونی چطور انجام میشه پ.خ کن.....

salibsatan
یک شنبه 27 اردیبهشت 1394, 10:12 صبح
می تونی تابع رو استاتیک هم بسازی و دیگه لازم نباشه ازش شی نمونه بسازی.اکستنشن متد هم راه حل خوبیه.هر کدوم از اینا دربارش سرچ بزنی مطلب هست ولی بازم اگه گیج شدی و ناموفق بودی بگو کل کد رو همینجا با تابع خودت بزارم دیگه راحت باشی

mahan0o0
یک شنبه 27 اردیبهشت 1394, 10:25 صبح
می تونی تابع رو استاتیک هم بسازی و دیگه لازم نباشه ازش شی نمونه بسازی.اکستنشن متد هم راه حل خوبیه.هر کدوم از اینا دربارش سرچ بزنی مطلب هست ولی بازم اگه گیج شدی و ناموفق بودی بگو کل کد رو همینجا با تابع خودت بزارم دیگه راحت باشی

اگه واسم کل کد رو بزارید که ممنون می شم اساسی. الان کد رو تقریبا می دونم توی کلاس به چه شکل میشه ولی نمیتونم توی برنامم ازش استفاده کنم. حالا شما کامل هم توی کلاس هم موقع استفاده ازش کدش رو بگید که عالی میشه بسیار ممنون

salibsatan
یک شنبه 27 اردیبهشت 1394, 10:34 صبح
namespace BLAH
{
class Class1
{

public static DateTime FNAME(string _s)
{
int yyyy, mm, dd;
PersianCalendar ps = new PersianCalendar();
yyyy = Int32.Parse(_s.Substring(0, 4));
mm = Int32.Parse(_s.Substring(5, 2));
dd = Int32.Parse(_s.Substring(8, 2));
return(Convert.ToDateTime(ps.ToDateTime(yyyy, mm, dd, 0, 0, 0, 0)));


}
}
}


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

DateTime dt = Class1.FNAME("1393/12/03");

mahan0o0
یک شنبه 27 اردیبهشت 1394, 12:53 عصر
namespace BLAH
{
class Class1
{

public static DateTime FNAME(string _s)
{
int yyyy, mm, dd;
PersianCalendar ps = new PersianCalendar();
yyyy = Int32.Parse(_s.Substring(0, 4));
mm = Int32.Parse(_s.Substring(5, 2));
dd = Int32.Parse(_s.Substring(8, 2));
return(Convert.ToDateTime(ps.ToDateTime(yyyy, mm, dd, 0, 0, 0, 0)));


}
}
}


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

DateTime dt = FNAME("1393/12/03");


من وقتی می خوام از این کلاس در برنامه استفاده کنم از کلاسم یک آبجکت می سازم و همین کدی که نوشتید رو می زارم ولی fname رو نمی شناسه یعنی در اصل کلاس رو نمیتونه بخونه باید چکار کنم؟

Fotofan
یک شنبه 27 اردیبهشت 1394, 15:19 عصر
namespace BLAH
{
class Class1
{

public static DateTime FNAME(string _s)
{
int yyyy, mm, dd;
PersianCalendar ps = new PersianCalendar();
yyyy = Int32.Parse(_s.Substring(0, 4));
mm = Int32.Parse(_s.Substring(5, 2));
dd = Int32.Parse(_s.Substring(8, 2));
return(Convert.ToDateTime(ps.ToDateTime(yyyy, mm, dd, 0, 0, 0, 0)));


}
}
}


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

DateTime dt = Class1.FNAME("1393/12/03");



با اجازه ی شما من کد رو به این شکل تغییر می دم. به جای string _s از کلمه ی کلیدی this استفاده می کنم:


class Class1
{


public static DateTime FNAME(this DateTime s)
{
int yyyy, mm, dd;
PersianCalendar ps = new PersianCalendar();
yyyy = Int32.Parse(_s.Substring(0, 4));
mm = Int32.Parse(_s.Substring(5, 2));
dd = Int32.Parse(_s.Substring(8, 2));
return(Convert.ToDateTime(ps.ToDateTime(yyyy, mm, dd, 0, 0, 0, 0)));
}
}

ebrahim.rayatparvar
یک شنبه 27 اردیبهشت 1394, 15:27 عصر
من وقتی می خوام از این کلاس در برنامه استفاده کنم از کلاسم یک آبجکت می سازم و همین کدی که نوشتید رو می زارم ولی fname رو نمی شناسه یعنی در اصل کلاس رو نمیتونه بخونه باید چکار کنم؟
کلاسی که دوست ما نوشتن از نوع static و نیاز به ساخت شی نداره و شما به طور مستقیم با نام کلاس به این متد دسترسی دارید البته در اول برنامه یک تغییر کوچک باید بدین.


public static class Class1
{

salibsatan
یک شنبه 27 اردیبهشت 1394, 15:27 عصر
نیازی به ساخت شی از کلاس نیست.چون تابع استاتیک هست.حتما چک کنید namespace نرم افزار و کلاستون یکی باشه.

salibsatan
یک شنبه 27 اردیبهشت 1394, 15:30 عصر
با اجازه ی شما من کد رو به این شکل تغییر می دم. به جای string _s از کلمه ی کلیدی this استفاده می کنم:


class Class1
{


public static DateTime FNAME(this DateTime s)
{
int yyyy, mm, dd;
PersianCalendar ps = new PersianCalendar();
yyyy = Int32.Parse(_s.Substring(0, 4));
mm = Int32.Parse(_s.Substring(5, 2));
dd = Int32.Parse(_s.Substring(8, 2));
return(Convert.ToDateTime(ps.ToDateTime(yyyy, mm, dd, 0, 0, 0, 0)));
}
}


با سلام و تشکر.دوتا نکته
1-ورودیمون استرینگ هست دوست عزیز.شما به datetime تغییرش دادی.تاریخ شمسی داریم می فرستیم به تابع و اصولا مشکل پیش میاد
2-این تغییر چه تاثیری روی کار و یا بهینه تر کردن کد داره؟
با تشکر