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
该
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日公历的第一时刻.
既然你DateTime是1, 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()方法没有任何参数,因此您的方法使用的CurrentCulture是ar-sa您在web.config中编写的方法.而且这种文化UmAlQuraCalendar默认具有日历.由于您的日期时间超出了此日历范围,因此您的代码会引发异常.
请记住,你有一个DateTime与1318在公历一年,不是 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)
| 归档时间: |
|
| 查看次数: |
4110 次 |
| 最近记录: |