You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

公历转波斯历代码未生效,输入输出日期一致问题求助

解决公历转波斯历返回原日期的问题

看起来你的代码逻辑方向是对的,但返回结果和输入完全一致,大概率是引用了错误的PersianCalendar类,或者没有正确使用.NET官方提供的系统全球化实现。

问题排查与修复步骤:

  1. 确保使用官方的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}"; 
    }
    
  2. 确认传入的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:18:55