c# - 将字符串波斯日期转换为公历日期时间

标签 c# datetime calendar

要将字符串波斯日期转换为公历 DateTime, 我使用日期时间选择器,它向我发送了一个字符串,如 "1394/02/20"

PersianCalendar p = new PersianCalendar();               
string[] d = start.Split('/');           
DateTime dt = new DateTime(int.Parse(d[0]), 
                           int.Parse(d[1]),
                           int.Parse(d[2]),
                           new HijriCalendar());

我的转换函数是

public static DateTime ToGregorianDate(this DateTime dt)
{
     PersianCalendar pc = new PersianCalendar();
     return pc.ToDateTime(dt.Year, dt.Month, dt.Day, dt.Hour, dt.Minute, 0, 0);    
}

它给出了 DateTime 我怎样才能发送正确的 DateTime 当它想要转换时显示此错误:

Input string was not in a correct format.

最佳答案

你有两个不同的问题:

  • DateTime 解析不支持阿拉伯数字

  • PersianCalendar 不是任何 CultureInfo 的一部分,因此在将 string 解析为 DateTime(您不能将其设置为预先存在的 CultureInfo)。

可能的解决方案:

string date = "۱۳۹۴/۰۲/۲۰";
string date2 = Regex.Replace(date, "[۰-۹]", x => ((char)(x.Value[0] - '۰' + '0')).ToString());

将阿拉伯数字替换为十进制

DateTime dt = DateTime.ParseExact(date2, "yyyy/MM/dd", CultureInfo.InvariantCulture);

然后忽略日历解析日期

PersianCalendar pc = new PersianCalendar();
DateTime dt2 = pc.ToDateTime(dt.Year, dt.Month, dt.Day, dt.Hour, dt.Minute, dt.Second, dt.Millisecond);

然后将日期转换为正确的日历。

关于c# - 将字符串波斯日期转换为公历日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29960204/

相关文章:

C# 将不同的字符串格式转换为日期

java - 日期格式化后以小写形式显示 AM 和 PM

android - 如何向 Android 添加新的手机日历?

c# - 如何在 DynamicProxy 中为 C# 自动属性指定默认值?

sql-server - T-SQL 日期时间到日期的转换 - 容差

jquery - Input-group-addon 元素不会触发日期类

java - 禁用日历事件移动 - Vaadin

c# - 导入的 C 函数在 C# 中有效,但在 VB6 中无效

c# - 包装任务返回方法的任何问题

c# - 避免使用 linq 和动态条件(过滤器)多次浏览列表