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

نام تاپیک: تبدیل ناصحیح شمسی به میلادی توسط PersianCalendar

  1. #1

    تبدیل ناصحیح شمسی به میلادی توسط PersianCalendar

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


    private static System.Globalization.PersianCalendar pc = new System.Globalization.PersianCalendar();
    .
    .
    .
    DateTime ConvertedDateTime = pc.ToDateTime(int.Parse(y), int.Parse(m), int.Parse(d), int.Parse(hh), int.Parse(mm), int.Parse(ss), 0);


    روی یه سیستم بعد از اینکه ویندوز به 10 تغییر یافت ، نتیحه این فانکشن درست نیست.

    اگه من تاریخ 1395/12/03 رو بهش بدم ، تاریخ 12/03/1395 رو به عنوان تاریخ میلادی برمی گردونه.

    به نظرتون مشکل چیه؟

  2. #2

    نقل قول: تبدیل ناصحیح شمسی به میلادی توسط PersianCalendar

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


    private static System.Globalization.PersianCalendar pc = new System.Globalization.PersianCalendar();
    .
    .
    .
    DateTime ConvertedDateTime = pc.ToDateTime(int.Parse(y), int.Parse(m), int.Parse(d), int.Parse(hh), int.Parse(mm), int.Parse(ss), 0);


    روی یه سیستم بعد از اینکه ویندوز به 10 تغییر یافت ، نتیحه این فانکشن درست نیست.

    اگه من تاریخ 1395/12/03 رو بهش بدم ، تاریخ 12/03/1395 رو به عنوان تاریخ میلادی برمی گردونه.

    به نظرتون مشکل چیه؟
    مشکل از اونجایی شروع شده که ویندوز 10 تقویم فارسی رو به رسمیت شناخته. وقتی کاربر تقویم ویندوز رو شمسی انتخاب کرده باشه و شما مقدار DateTime.Now رو بخونید بجای این که میلادی به شما بده شمسی برمیگردونه. و این یعنی که کلاس DateTime به صورت پیش فرض داره بر اساس تقویم منطقه ای که ویندوز روش تنظیم شده مقدار ها رو برمیگردونه. اگر میخوای ازش خروجی میلادی بگیری باید بهش منطقه تقویمی رو معرفی کنی و به این صورت استفاده کنی :

    ConvertedDateTime.ToString(System.Globalization.Cu ltureInfo.InvariantCulture);
    دانلود حسابخانه مانی، برنامه مدیریت درآمد و هزینه رایگان

    هر آنچه که هستیم، نتیجه افکاریست که در گذشته داشته ایم. (بودا)
    واحد فاصله «متر» نیست، «اشتیاق» است. اگر مشتاقش باشی حتی يک قدم هم فاصله ای دور است.

    رنگ رنگی | آموزش

  3. #3

    نقل قول: تبدیل ناصحیح شمسی به میلادی توسط PersianCalendar

    نقل قول نوشته شده توسط Mani_rf مشاهده تاپیک
    مشکل از اونجایی شروع شده که ویندوز 10 تقویم فارسی رو به رسمیت شناخته. وقتی کاربر تقویم ویندوز رو شمسی انتخاب کرده باشه و شما مقدار DateTime.Now رو بخونید بجای این که میلادی به شما بده شمسی برمیگردونه. و این یعنی که کلاس DateTime به صورت پیش فرض داره بر اساس تقویم منطقه ای که ویندوز روش تنظیم شده مقدار ها رو برمیگردونه. اگر میخوای ازش خروجی میلادی بگیری باید بهش منطقه تقویمی رو معرفی کنی و به این صورت استفاده کنی :

    ConvertedDateTime.ToString(System.Globalization.Cu ltureInfo.InvariantCulture);
    ممنون. این کد کمک کرد.
    یه سوال دیگه:

    string xxx = (ConvertedDateTime.ToString(CultureInfo.InvariantC ulture);
    dtformatted = String.Format("{0:MM/dd/yyyy}", xxx).Substring(0, 10);



    من میخواستم تاریخم با فرمت MM/dd/yyyy باشه. با این دستور فرمت مدنظرمو بهش دادم. حالا میخووام این تاریخ رو (xxx) که به صورت string هست رو به datetime تبدیل کنم که در بانک ذخیرش کنم.
    چند تا تابع استفاده کردم اما خطا میداد که فرمت ورودی صحیح نیست. چطور دوباره string رو به datetime تبدیل کنم؟

  4. #4
    کاربر دائمی آواتار negar442
    تاریخ عضویت
    تیر 1393
    محل زندگی
    مازندران
    پست
    210

    نقل قول: تبدیل ناصحیح شمسی به میلادی توسط PersianCalendar

    چه لزومی داره که تاریخ رو به شکل datetime ذخیره کنید؟

    اگه محدودیتی ندارین بهترین روش اینه که تاریخ رو به شکل رشته در دیتابیس ذخیره کنید. مثلا رشته 13951204 رو در جدول ذخیره کنید. این روشیه که شرکتها ازش استفاده میکنند.

  5. #5

    نقل قول: تبدیل ناصحیح شمسی به میلادی توسط PersianCalendar

    نقل قول نوشته شده توسط resident مشاهده تاپیک
    ممنون. این کد کمک کرد.
    یه سوال دیگه:

    string xxx = (ConvertedDateTime.ToString(CultureInfo.InvariantC ulture);
    dtformatted = String.Format("{0:MM/dd/yyyy}", xxx).Substring(0, 10);



    من میخواستم تاریخم با فرمت MM/dd/yyyy باشه. با این دستور فرمت مدنظرمو بهش دادم. حالا میخووام این تاریخ رو (xxx) که به صورت string هست رو به datetime تبدیل کنم که در بانک ذخیرش کنم.
    چند تا تابع استفاده کردم اما خطا میداد که فرمت ورودی صحیح نیست. چطور دوباره string رو به datetime تبدیل کنم؟
    طبق پست اول ، شما از طریق PersianCalendar تاریخ شمسی رو به DateTime تبدیل میکنید که همین DateTime رو میتونید در دیتابیس ذخیره کنید. در ویندوز 10 وقتی تنظیمات روی persian ست شده باشه، به طور پیشفرض از Culture فارسی برای نمایش استفاده میشه، ولی برای اینکه تاریخ در یک Culture خاص نمایش داده شود بایست طبق کد Mani_rf عمل کنید. پس فقط در جایی که تاریخ رو نمایش میدید باید متد ToString را اصلاح کنید.

  6. #6

    نقل قول: تبدیل ناصحیح شمسی به میلادی توسط PersianCalendar

    نقل قول نوشته شده توسط negar442 مشاهده تاپیک
    چه لزومی داره که تاریخ رو به شکل datetime ذخیره کنید؟

    اگه محدودیتی ندارین بهترین روش اینه که تاریخ رو به شکل رشته در دیتابیس ذخیره کنید. مثلا رشته 13951204 رو در جدول ذخیره کنید. این روشیه که شرکتها ازش استفاده میکنند.
    خیر. میبایست حتما به صورت datetimeدر دیتابیس ذخیره کنم

  7. #7

    نقل قول: تبدیل ناصحیح شمسی به میلادی توسط PersianCalendar

    نقل قول نوشته شده توسط negar442 مشاهده تاپیک
    چه لزومی داره که تاریخ رو به شکل datetime ذخیره کنید؟

    اگه محدودیتی ندارین بهترین روش اینه که تاریخ رو به شکل رشته در دیتابیس ذخیره کنید. مثلا رشته 13951204 رو در جدول ذخیره کنید. این روشیه که شرکتها ازش استفاده میکنند.
    درسته که بعضی از شرکت ها از این روش استفاده میکنند اما این روش لزوما روش خوبی نیست.
    1- با استفاده از این روش شما UTC به عبارتی Time Zone رو ذخیره نمیکنید، در نتیجه گر بخواید برنامه ای مثل تلگرام بنویسید عملا همچین روش با شکست رو برو میشه.
    2- حجم ذخیره سازی داده ای که دارید برای ذخیره تاریخ و ساعت همزمان حدود 2 برابر بیشتره تا نگهداری DateTime
    و...
    دانلود حسابخانه مانی، برنامه مدیریت درآمد و هزینه رایگان

    هر آنچه که هستیم، نتیجه افکاریست که در گذشته داشته ایم. (بودا)
    واحد فاصله «متر» نیست، «اشتیاق» است. اگر مشتاقش باشی حتی يک قدم هم فاصله ای دور است.

    رنگ رنگی | آموزش

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

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