亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用特定區域性調用 DateTime 的 ToString 方法

使用特定區域性調用 DateTime 的 ToString 方法

C#
楊__羊羊 2022-12-24 10:28:16
我有一個DateTime類型的對象,如下所示:var date = new DateTime(1999,1,18);然后我用這樣的fa-IR文化信息調用ToString方法:var strDate = date.ToString("yyyy/MM/dd",CultureInfo.GetCultureInfo("fa-IR"));我希望strDate為“1377/10/28”,相當于fa-IR文化中的“1999/1/18” 。但在調用 ToString 方法后,我得到“1999/1/18”,這是不正確的。任何人都知道問題出在哪里以及如何解決?
查看完整描述

2 回答

?
搖曳的薔薇

TA貢獻1793條經驗 獲得超6個贊

您需要覆蓋文化日歷,并且還需要接收波斯名稱,您也需要覆蓋它們....


大致是這樣的:


using System;

using System.Collections.Generic;

using System.Globalization;

using System.Reflection;


namespace Ravis24.Helpers

{

    public class PersianCulture : CultureInfo

    {

        private readonly System.Globalization.Calendar cal;

        private readonly System.Globalization.Calendar[] optionals;


        public PersianCulture()

            : this("fa-IR", true)

        { }


        public PersianCulture(string cultureName, bool useUserOverride)

            : base(cultureName, useUserOverride)

        {

            cal = base.OptionalCalendars[0];

            var optionalCalendars = new List<System.Globalization.Calendar>();

            optionalCalendars.AddRange(base.OptionalCalendars);

            optionalCalendars.Insert(0, new PersianCalendar());

            Type formatType = typeof(DateTimeFormatInfo);

            Type calendarType = typeof(System.Globalization.Calendar);

            PropertyInfo idProperty = calendarType.GetProperty("ID", BindingFlags.Instance | BindingFlags.NonPublic);

            FieldInfo optionalCalendarfield = formatType.GetField("optionalCalendars", BindingFlags.Instance | BindingFlags.NonPublic);

            var newOptionalCalendarIDs = new Int32[optionalCalendars.Count];


            for (int i = 0; i < newOptionalCalendarIDs.Length; i++)

                newOptionalCalendarIDs[i] = (Int32)idProperty.GetValue(optionalCalendars[i], null);


            optionalCalendarfield.SetValue(DateTimeFormat, newOptionalCalendarIDs);


            optionals = optionalCalendars.ToArray();


            cal = optionals[0];


            DateTimeFormat.Calendar = optionals[0];


            DateTimeFormat.MonthNames = new[] { "???????", "????????", "?????", "???", "?????", "??????", "???", "????", "???", "??", "????", "?????", "" };

            DateTimeFormat.MonthGenitiveNames = new[] { "???????", "????????", "?????", "???", "?????", "??????", "???", "????", "???", "??", "????", "?????", "" };

            DateTimeFormat.AbbreviatedMonthNames = new[] { "???????", "????????", "?????", "???", "?????", "??????", "???", "????", "???", "??", "????", "?????", "" };

            DateTimeFormat.AbbreviatedMonthGenitiveNames = new[] { "???????", "????????", "?????", "???", "?????", "??????", "???", "????", "???", "??", "????", "?????", "" };

            DateTimeFormat.AbbreviatedDayNames = new string[] { "?", "?", "?", "?", "?", "?", "?" };

            DateTimeFormat.ShortestDayNames = new string[] { "?", "?", "?", "?", "?", "?", "?" };

            DateTimeFormat.DayNames = new string[] { "??????", "??????", "??????", "????????", "???????", "????", "????" };

            DateTimeFormat.AMDesignator = "?.?";

            DateTimeFormat.PMDesignator = "?.?";

            DateTimeFormat.ShortDatePattern = "yyyy/MM/dd";

            DateTimeFormat.ShortTimePattern = "HH:mm";

            DateTimeFormat.LongTimePattern = "HH:mm:ss";

            DateTimeFormat.FullDateTimePattern = "yyyy/MM/dd HH:mm:ss";

        }


        public override System.Globalization.Calendar Calendar

        {

            get { return cal; }

        }


        public override System.Globalization.Calendar[] OptionalCalendars

        {

            get { return optionals; }

        }


        public static DateTime PersianToGregorianUS(DateTime faDate)

        {

            return new PersianCalendar().ToDateTime(faDate.Year, faDate.Month, faDate.Day, faDate.Hour, faDate.Minute, faDate.Second, faDate.Millisecond);

        }

    }

}


查看完整回答
反對 回復 2022-12-24
?
料青山看我應如是

TA貢獻1772條經驗 獲得超8個贊

試試這個:


Thread.CurrentThread.CurrentUICulture = new CultureInfo("fa-IR");

var date = new DateTime(1999, 1, 18);

var strDate = date.ToString("yyyy/MM/dd", CultureInfo.GetCultureInfo("fa-IR"));


Console.WriteLine(strDate);

Console.ReadKey();

這給出了輸出“1377/10/28”


查看完整回答
反對 回復 2022-12-24
  • 2 回答
  • 0 關注
  • 79 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號