公历转波斯历代码未生效,输入输出日期一致问题求助
解决公历转波斯历返回原日期的问题
看起来你的代码逻辑方向是对的,但返回结果和输入完全一致,大概率是引用了错误的PersianCalendar类,或者没有正确使用.NET官方提供的系统全球化实现。
问题排查与修复步骤:
确保使用官方的
System.Globalization.PersianCalendar
不少第三方库也会提供同名的PersianCalendar类,如果代码里没有明确指定命名空间,很可能不小心用了其他不符合预期的实现。请在代码顶部添加命名空间引用,或者直接使用完全限定类名:using System.Globalization; // 必须添加这个引用,确保使用官方波斯历实现 public static string ToPersianDate(this DateTime t) { var pc = new PersianCalendar(); // 补充:为了得到带前导零的月份/日期(比如07而非7),需要格式化输出 return $"{pc.GetYear(t)}/{pc.GetMonth(t):00}/{pc.GetDayOfMonth(t):00}"; }确认传入的
DateTime是公历日期
如果你传入的DateTime实例是通过波斯历构造的(比如new DateTime(2019,10,8, pc)),它内部存储的其实是对应公历的Ticks,这时候调用pc.GetYear()的结果会和你预期的公历转波斯历逻辑不符。确保你传入的DateTime是基于公历创建的(比如new DateTime(2019,10,8))。
测试验证
用你提供的测试日期2019/10/08(公历)运行修复后的代码,应该会返回预期的1398/07/16。
内容的提问来源于stack exchange,提问作者Afsaneh Daneshi
相关产品推荐
相关产品推荐

