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

将公历转回历时遇System.FormatException错误求助

解决公历转回历时的FormatException问题

咱们先拆解下你代码里的几个问题,尤其是导致报错的核心原因:

你代码里的问题点

  1. 语法错误:DateTime dt = 1/6/2018 12:00:00 AM;这行写法不对,C#里不能直接这么声明日期,得用new DateTime(2018, 1, 6)来实例化公历日期对象。
  2. 多余的解析步骤:DateTime.Parse(dt.ToString())完全没必要,dt本身就是DateTime类型,直接用就行,绕这一圈纯属画蛇添足。
  3. 核心报错原因:你用绑定了UmAlQura日历的ar-SA文化去调用ParseExact,解析公历格式的字符串"1/6/2018"——这时候ParseExact会默认把输入的字符串当成回历日期来处理,但回历的年份目前才到144x左右,2018这个年份在回历里是无效的,自然就抛出FormatException了。

正确的实现方式

根据你的需求(把公历日期转成回历日期),分两种场景给你正确代码:

场景1:已有公历DateTime对象,直接转成回历日期字符串

// 先实例化你要转换的公历日期(2018年1月6日)
DateTime gregorianDate = new DateTime(2018, 1, 6);

// 创建沙特阿拉伯文化,并指定使用UmAlQura回历
CultureInfo arSA = new CultureInfo("ar-SA");
arSA.DateTimeFormat.Calendar = new UmAlQuraCalendar();

// 将公历日期格式化为回历字符串(这里用dd/MM/yyyy格式,你可以按需调整)
string hijriDateString = gregorianDate.ToString("dd/MM/yyyy", arSA);
// 输出示例:"27/09/1439"(对应公历2018年1月6日的回历日期)

场景2:从公历日期字符串开始,先解析再转成回历

如果你是从字符串"1/6/2018"开始处理,要先把它解析成公历DateTime,再转成回历:

string gregorianDateStr = "1/6/2018";
string gregorianFormat = "M/dd/yyyy";

// 先解析为公历DateTime(用InvariantCulture确保解析逻辑不受系统区域影响)
DateTime gregorianDate = DateTime.ParseExact(gregorianDateStr, gregorianFormat, CultureInfo.InvariantCulture);

// 同上,转成回历字符串
CultureInfo arSA = new CultureInfo("ar-SA");
arSA.DateTimeFormat.Calendar = new UmAlQuraCalendar();
string hijriDateString = gregorianDate.ToString("dd/MM/yyyy", arSA);

额外补充:如果要解析回历字符串为DateTime

要是你反过来想把回历字符串转成DateTime,那才需要用ar-SA文化去ParseExact,但输入得是有效的回历日期:

string hijriDateStr = "27/09/1439";
string hijriFormat = "dd/MM/yyyy";

CultureInfo arSA = new CultureInfo("ar-SA");
arSA.DateTimeFormat.Calendar = new UmAlQuraCalendar();

// 解析回历字符串为DateTime(这个DateTime内部还是公历,但绑定了回历文化)
DateTime hijriDate = DateTime.ParseExact(hijriDateStr, hijriFormat, arSA);

总结一下

你之前的错误是搞混了「解析日期字符串」和「转换日期格式」的逻辑:用回历文化去解析公历格式的字符串,自然会因为年份无效报错。正确的思路是先拿到正确的公历DateTime,再用回历文化把它格式化成回历日期字符串就行。

内容的提问来源于stack exchange,提问作者AbdulAziz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:28:17