Вернуть Datetime.Day в персидской культуре C#

Я намерен вернуть день месяца в персидской культуре. Я уже установил культуру, и она работает хорошо. день, который показывает, находится в персидском календаре. Но мне нужно где-то проверить точный день месяца,

например сегодня 2018-2-3, а в персидском календаре 1396-11-14,

var date = DateTime.Now 

показывает мне правильную дату и время в персидском календаре. Но

var date = DateTime.Now.Day 

показывает мне 3, а не 14. Мне нужно 14! Я знаю, что могу изменить его на строковое и получить день, но это делает мой код настолько грязным, и я не очень заинтересован в этом, потому что я использовал это во многих частях программы. Там в любом случае?

2 ответа

Решение

Я хочу уточнить несколько вещей.

DateTime экземпляр всегда в григорианском календаре, несмотря ни на что. Удивительно, но у него есть несколько конструкторов, которые занимают Calendar в качестве параметра, но я не думаю, что этот параметр влияет на сохранение его как григорианского эквивалента внутри.

Если вы хотите получить некоторые части DateTime в определенном календаре, вам нужно вызвать этот экземпляр DateTime в качестве параметра GetXXX методы в этом экземпляре календаря.

Для экзамена;

var today = DateTime.Today;
var persian = new PersianCalendar();
Console.WriteLine(persian.GetDayOfMonth(today)); // 14

Здесь демонстрация.

Вы попробуете этот код.

 CultureInfo info = new CultureInfo("fa-Ir");
 info.DateTimeFormat.Calendar = new PersianCalendar();          
 string day= "";
 Thread.CurrentThread.CurrentCulture = info;
 day= DateTime.Now.ToString("dd");

перейдите по этой ссылке: https://archive.codeplex.com/?p=persianculture

Другие вопросы по тегам