Совершенно невежественен здесь ... но в целом вы должны обрабатывать "внутренне" (в программе и в БД) все даты, используя обычный Proleptic Gregorian календарь (согласно ISO 8601), и переформатироватьих на персидский только когда вы читаете ввод от пользователя / записываете вывод для пользователяВ .NET есть класс PersianCalendar , который помогает преобразовать персидский в американский и обратно.
Например,
var pc = new PersianCalendar();
DateTime dt = pc.ToDateTime(1397, 02, 29, 0, 0, 0, 0);
работает правильно, но если вы возьметепосмотрите на переменную dt, вы увидите, что она отображается как 2018-05-19.
Если при выполнении ToString()
для переменной DateTime
вы видите персидскую дату, то, вероятно, у вас ошибка вваш код.Если вы делаете SELECT
для таблицы в БД, вы видите персидскую дату, то, вероятно, у вас есть ошибка в вашей БД.
Интересный парадокс заключается в том, что и в .NET, и в SQL даты сохраняются как единое целоечисло, представляющее, сколько единиц времени (где в .NET единица времени составляет 100 наносекунд, в SQL это 1 день) прошло от «нулевой точки» до даты, но затем все их «стандартные» методы для обработкидаты (как в .NET, так и в SQL) используют григорианский календарь (потому что он наиболее часто используется в мире).