• 1402/02/05
  • 0
  • 73
1402/02/05 |
backend

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

با سلام 
من از دستور زیر برای نمایش تاریخ شمسی استفاده میکنم،
در سیستم خودم تاریخ به صورت صحیح نمایش داده میشه ولی زمانی که پروژه رو پابلیش میکنم و روی محیط پروداکشن میزاریم به صورت میلادی به فارسی برگشت داده شده، نمایش میده

DateTime.Now.ToString("dddd, d MMMM, yyyy", new CultureInfo("fa-IR"));

نتیجه در محیط توسعه => سه‌شنبه, 5 اردیبهشت, 1402

نتیجه در محیط پروداکشن => سه شنبه، 25 آوریل، 2023


سلام،

مشکلی که داری به خاطر تفاوت تنظیمات زمان و مکان بین کامپیوتر خودت و سرور می‌تونه باشه. وقتی پروژه‌ات رو منتشر می‌کنی و روی سرور قرار می‌دهی، سرور شاید از تنظیمات متفاوتی استفاده کنه.

برای حل این مشکل می‌تونی کد زیر رو امتحان کنی:

var persianCalendar = new PersianCalendar();
var dateTime = DateTime.Now;
var persianDate = $"{persianCalendar.GetDayOfWeek(dateTime)}, {persianCalendar.GetDayOfMonth(dateTime)} {persianCalendar.GetMonth(dateTime)} {persianCalendar.GetYear(dateTime)}";

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


ممنون از راهنماییتون و وقتی که گذاشتید
اما این روش بهینه ای نیست که من بتونم ازش استفاده کنم و کد نویسی من رو زیاد میکنه. چون من از این دستور زیاد استفاده کرده بودم و برای فرمت های مختلف باید هارد کد بزنم
مشکل از ویندوز سرور بود، در محیط پروداکشن از ویندوز سرور 2012 استفاده میشد که با بروز رسانی به ویندوز سرور 2019 این مشکل برطرف شد


سلام
  خوشحالیم که مشکل شما حل شده است. کد ارسال شده برای شما فقط یک راهکار پیشنهادی است. برای بهینه‌سازی کد ، شما می‌توانید از روش‌های زیر استفاده کنید.

public class DateHelper
{
    public static string ConvertToPersianDate(DateTime dateTime, string format)
    {
        var persianCalendar = new PersianCalendar();
        int year = persianCalendar.GetYear(dateTime);
        int month = persianCalendar.GetMonth(dateTime);
        int day = persianCalendar.GetDayOfMonth(dateTime);
        DayOfWeek dayOfWeek = persianCalendar.GetDayOfWeek(dateTime);

        string persianDate = format.Replace("yyyy", year.ToString())
                                   .Replace("MM", month.ToString("00"))
                                   .Replace("dd", day.ToString("00"))
                                   .Replace("ddd", dayOfWeek.ToString());
        return persianDate;
    }
}

حالا برای استفاده از این متد کمکی به این شکل عمل کنید:

DateTime dateTime = DateTime.Now;
string format = "ddd, dd MM yyyy";
string persianDate = DateHelper.ConvertToPersianDate(dateTime, format);
Console.WriteLine(persianDate);

 

  این روش به تنظیمات محلی سیستم عامل وابسته نیست و تبدیل تاریخ را بر اساس تقویم شمسی انجام می‌دهد. 



پاسخی برای این باگ ارسال کنید

لطفا کدها را درون قطعه کد ارسال نمایید

برای ارسال پاسخ باید وارد حساب کاربری خود شوید
ورود به حساب کاربری