在asp.net中收到阿拉伯语日期时间错误

Abr*_*sef 7 c# culture datetime calendar

我使用ADO断开模式通过填充数据集ds从数据库获取数据.除日期字段外,所有数据都成立

string strDate = ds.Tables[0].Rows[0]["H_DT"].ToString();
Run Code Online (Sandbox Code Playgroud)

抛出异常说:

此日历不支持指定的时间.它应该在04/30/1900 00:00:00(格里高利日)和11/16/2077 23:59:59(格里高利日期)之间.

我试着写这段代码

System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("ar-sa");
System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("ar-sa");
Run Code Online (Sandbox Code Playgroud)

把文化改成阿拉伯语,但没有任何运气.

更新

以下是变量快速监视的屏幕截图

在此输入图像描述

Son*_*nül 10

DateTime.ToString方法

ToString()方法返回当前区域性使用的日历中日期和时间的字符串表示形式.如果当前DateTime实例的值早于 Calendar.MinSupportedDateTime或晚于 该值,则Calendar.MaxSupportedDateTime该方法抛出一个 ArgumentOutOfRangeException.

您的ar-sa文化的默认日历是UmAlQuraCalendar日历.

var culture = CultureInfo.GetCultureInfo("ar-sa");
Console.WriteLine(culture.Calendar); // prints UmAlQuraCalendar
Run Code Online (Sandbox Code Playgroud)

来自UmAlQuraCalendar.MinSupportedDateTime物业

UmAlQuraCalendar类支持的最早日期和时间,相当于公历1900年4月30日公历的第一时刻.

既然你DateTime1, 1, 1398,那就抛出太正常了ArgumentOutOfRangeException.

您可以解决您的问题,IFormatProvider在您的DateTime.ToString()方法中提供GregorianCalendar默认情况下的参数.你可以使用InvariantCulture例如.

string strDate = ds.Tables[0].Rows[0]["H_DT"].ToString(CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)

我在web配置中写了全球化配置,因为ar-sa在所有应用程序中都是全局的,但我遇到了同样的错误,请澄清我,谢谢

A 默认DateTime属于公历.从结构 ;DateTime

每个DateTime成员隐式使用公历来执行其操作,但指定日历的构造函数和带有参数的方法除外IFormatProvider,例如System.Globalization.DateTimeFormatInfo,它隐式指定日历.

这意味着您的ds.Tables[0].Rows[0]["H_DT"]日期时间默认为格里高利日历.但是,由于您使用的.ToString()方法没有任何参数,因此您的方法使用的CurrentCulturear-sa您在web.config中编写的方法.而且这种文化UmAlQuraCalendar默认具有日历.由于您的日期时间超出了此日历范围,因此您的代码会引发异常.

请记住,你有一个DateTime1318在公历一年,不是 1318在一年UmAlQuraCalendar压延机.

举个例子;

var date = new DateTime(1318, 1, 1);
Console.WriteLine(date.ToString(new CultureInfo("ar-sa")));
Run Code Online (Sandbox Code Playgroud)

抛出ArgumentOutOfRangeException异常,因为它与你的情况完全相同.这是1318日历时间,这是格里高利日历中的一年,但是没有关于UmAlQuraCalendar此日期时间的日历表示,因为在UmAlQuraCalendar日历中,年份从1900格里高利日历开始.

看看UmAlQuraCalendar日历是如何实现的 ;

////////////////////////////////////////////////////////////////////////////
//
//  Notes about UmAlQuraCalendar
//
////////////////////////////////////////////////////////////////////////////
 /*
 **  Calendar support range:
 **      Calendar    Minimum     Maximum
 **      ==========  ==========  ==========
 **      Gregorian   1900/04/30   2077/11/17
 **      UmAlQura    1318/01/01   1500/12/30
 */
Run Code Online (Sandbox Code Playgroud)