نمایش نتایج 1 تا 2 از 2

نام تاپیک: تبدیل تاریخ شمسی به میلادی و بالعکس با استفاده از Extension Methods

  1. #1
    کاربر دائمی آواتار clover
    تاریخ عضویت
    خرداد 1388
    محل زندگی
    اصفهان - اراک
    پست
    646

    تبدیل تاریخ شمسی به میلادی و بالعکس با استفاده از Extension Methods

    سلام
    از اونجایی که تا الان پست های زیاد و همچنین راه حل های زیادی برای تبدیل تاریخ شمسی به میلادی و بالعکس دیدم، تصمیم گرفتم من هم یه راه حل ساده اما کاربردی برای این کار پیشنهاد بدم، توی این راه حل نیاز به ساختن اشیا از کلاس های مبدل نیست، من فقط از یکی از قابلیت های جدید C#‎‎ 3.0 که همون Extension Method ها هست استفاده کردم و به کلاس DateTime متد هایی برای تبدیل به تاریخ شمسی و همینطور به کلاس string متدی برای تبدیل به تاریخ میلادی دادم.

    کاری که باید انجام بدید اضافه کردن کلاس زیر به برنامه ی مورد نظر هست:
    using System;
    using System.Globalization;
    using System.Text.RegularExpressions;


    public static class Extentions
    {
    public static String ToPersianDate(this DateTime dateTime)
    {
    PersianCalendar persianCalendar = new PersianCalendar();
    return string.Format("{0}/{1:00}/{2:00}",
    persianCalendar.GetYear(dateTime),
    persianCalendar.GetMonth(dateTime),
    persianCalendar.GetDayOfMonth(dateTime));
    }

    public static String ToPersianDateTime(this DateTime dateTime)
    {
    PersianCalendar persianCalendar = new PersianCalendar();
    return string.Format("{0}/{1:00}/{2:00} ساعت {3:00}:{4:00}",
    persianCalendar.GetYear(dateTime),
    persianCalendar.GetMonth(dateTime),
    persianCalendar.GetDayOfMonth(dateTime),
    persianCalendar.GetHour(dateTime),
    persianCalendar.GetMinute(dateTime));
    }

    public static String ToPersianTime(this DateTime dateTime)
    {
    PersianCalendar persianCalendar = new PersianCalendar();
    return string.Format("ساعت {0:00}:{1:00}",
    persianCalendar.GetHour(dateTime),
    persianCalendar.GetMinute(dateTime));
    }

    public static DateTime ToDateTime(this string objDate)
    {
    int year = 0;
    int month = 0;
    int day = 0;
    PersianCalendar persianCalendar = new PersianCalendar();

    string date = objDate as string;
    Match match;

    if (Regex.IsMatch(date, @"^((0?[1-9]|[12][0-9]|3[01])[- /.](0?[1-9]|1[012])[- /.](13|14)?\d{2})|((13|14)\d{2}[- /.](0?[1-9]|1[012])[- /.](0?[1-9]|[12][0-9]|3[01]))$"))
    {
    match = Regex.Match(date, @"^((0?[1-9]|[12][0-9]|3[01])[- /.](0?[1-9]|1[012])[- /.]((13|14)?\d{2}))|(((13|14)\d{2})[- /.](0?[1-9]|1[012])[- /.](0?[1-9]|[12][0-9]|3[01]))$");

    if (match.Groups[1].Success)
    {
    day = Convert.ToInt32(match.Groups[2].Value);
    month = Convert.ToInt32(match.Groups[3].Value);

    if (match.Groups[5].Success)
    {
    year = Convert.ToInt32(match.Groups[4].Value);
    }
    else
    {
    year = Convert.ToInt32(string.Format("{0:00}{1:00}", persianCalendar.GetYear(DateTime.Now) / 100, match.Groups[4].Value));
    }
    }
    else
    {
    day = Convert.ToInt32(match.Groups[10].Value);
    month = Convert.ToInt32(match.Groups[9].Value);
    year = Convert.ToInt32(match.Groups[7].Value);
    }
    }
    else
    {
    throw new Exception("Invalid Date Expression");
    }

    return persianCalendar.ToDateTime(year, month, day, 0, 0, 0, 0);
    }
    }


    و بعد برای تبدیل تاریخ میلادی به شمسی و بالعکس می تونید به این صورت عمل کنید:
    string persianDateTime = DateTime.Now.ToPersianDateTime();
    DateTime georgianDateTime = "21/8/90".ToDateTime();


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

    موفق باشید
    آخرین ویرایش به وسیله clover : چهارشنبه 30 اسفند 1391 در 11:19 صبح

  2. #2
    مدیر بخش آواتار ahmad156
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    شیراز
    پست
    2,104

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

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



برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •