تبدیل تاریخ شمسی به میلادی

محسن جعفری

عضویت : 1397/12/09 پرسش ها : 6 پاسخ ها : 4

تبدیل تاریخ شمسی به میلادی

ارسال شده در : ‫۶ ماه قبل، یک شنبه ۲۹ اردیبهشت ۱۳۹۸، ساعت ۱۴:۴۴

سلام آقای مدائنی من از این تابع تبدیل تاریخ شما استفاده کردم ولی در بعضی از تاریخ ها اشتباه انجام میده 

تابع بهتری برای این کار هست؟

ایمان مدائنی

عضویت : 1396/09/10 پرسش ها : 5 پاسخ ها : 8097

(پاسخ صحیح)

ارسال شده در :‫۶ ماه قبل، دو شنبه ۳۰ اردیبهشت ۱۳۹۸، ساعت ۰۸:۳۰

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

ممکنه خطا برای درست وارد نکردن باشه مثلا به جای 1398/02/02 بزنه 1398/2/2

1 تشکر

ایمان مدائنی

عضویت : 1396/09/10 پرسش ها : 5 پاسخ ها : 8097
ارسال شده در :‫۶ ماه قبل، یک شنبه ۲۹ اردیبهشت ۱۳۹۸، ساعت ۱۵:۳۷

سلام 

من سالهاست استفاده میکنم و مشکلی ندارم 

0 تشکر

محسن جعفری

عضویت : 1397/12/09 پرسش ها : 6 پاسخ ها : 4
ارسال شده در :‫۶ ماه قبل، یک شنبه ۲۹ اردیبهشت ۱۳۹۸، ساعت ۱۵:۵۳

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

0 تشکر

ایمان مدائنی

عضویت : 1396/09/10 پرسش ها : 5 پاسخ ها : 8097
ارسال شده در :‫۶ ماه قبل، یک شنبه ۲۹ اردیبهشت ۱۳۹۸، ساعت ۱۵:۵۵

من همیشه اصولی کاتر میکنم و تاحالا شمسی ذخیره نکردم 

سرچ کنید شاید قبلا کسی این اشتباه رو انجام داده باشه و راه حلی براش باشه 

1 تشکر

محسن جعفری

عضویت : 1397/12/09 پرسش ها : 6 پاسخ ها : 4
ارسال شده در :‫۶ ماه قبل، یک شنبه ۲۹ اردیبهشت ۱۳۹۸، ساعت ۱۸:۵۷

منم شمسی ذخیره نمی کنم میلادی ذخیره میکنم ولی زمانه که می خوام از یوزر تاریخ بگیرم که از این تاریخ تا این تاریخ باید تبدیل بشه به میلادی بعد جستجو انجام بشه  ولی در بعضی از تاریخ ها خطا داره

این خطاشه

String was not recognized as a valid DateTime.

و این کدی که نوشتم

using (UnitOfWork db = new UnitOfWork())
            {
                
                dgvFactor.AutoGenerateColumns = false;
                List<Factor> result = new List<Factor>();
                DateTime startDate;
                DateTime endDate;
                int rowTotal;
                startDate = Convert.ToDateTime (StartDate.Text);
                startDate = DateConvertor.ToMiladi(startDate);
                result.AddRange(db.FactorRoozRepository.Get(r=> r.Date >= startDate).ToList());
                // result = result.Where(r => r.Date >= startDate).ToList();}
                endDate = Convert.ToDateTime(EndDate.Text);
                endDate = DateConvertor.ToMiladi(endDate);
                result = result.Where(r => r.Date <= endDate).ToList();
                dgvFactor.Rows.Clear();
                foreach (var factor in result)
                {
                    int total = factor.Price;
                    lblTotalkol.Text = Convert.ToString(int.Parse(lblTotalkol.Text) + total);
                    string strPirce = Convert.ToString(factor.Price);
                    strPirce = string.Format("{0:N0}", double.Parse(strPirce.Replace(",", "")));
                    dgvFactor.Rows.Add(factor.FactorID, factor.Date.ToShamsi(), factor.Discription, strPirce);

                    rowTotal = dgvFactor.RowCount;
                    lblTotal.Text = Convert.ToString(rowTotal);

                }

تاریخی هم که کاربر وارد میکنه مثلا 1398/02/29 هست

0 تشکر

shahrooz_274

عضویت : 1397/02/18 پرسش ها : 5 پاسخ ها : 5
ارسال شده در :‫۶ ماه قبل، دو شنبه ۳۰ اردیبهشت ۱۳۹۸، ساعت ۰۸:۴۵

سلام

منم دقیقا همین مشکل را داشتم وقتی از یوزر می خوای تاریخ بگیری باید با فرمت String باشه و طبق گفته استاد باید ابتدا به DateTime تبدیل بشه و سپس با کانورتور به تاریخ میلادی تبدیل بشه ولی مشکل اینجاست که ماه 2 میلادی 28 روز بیشتر نداره و برای روزهای 29 و 30 و 31 نمیتونه تبدیل کنه 

من این تیکه کد را برای تبدیل پیدا کردم

public static DateTime ToGeorgianDateTime(this string persianDate)
        {
            int year = Convert.ToInt32(persianDate.Substring(0, 4));
            int month = Convert.ToInt32(persianDate.Substring(5, 2));
            int day = Convert.ToInt32(persianDate.Substring(8, 2));
            DateTime georgianDateTime = new DateTime(year, month, day, new System.Globalization.PersianCalendar());
            return georgianDateTime;
        }

 

2 تشکر

برای ارسال پاسخ باید وارد شوید و یا در سایت عضو شوید