贾拉利语/波斯语日期验证错误
本文关键字:验证 错误 日期 波斯语 贾拉利 | 更新日期: 2023-09-27 18:04:51
我正在使用c#开发阿拉伯语/达里语/普什图语(阿富汗)的应用程序,并使用贾拉利/波斯日历进行日期选择。我想在保存到数据库之前验证输入日期。我使用下面的函数进行验证,并将Jalali/波斯日历日期传递给此函数。当用户选择"28/02/1393"这样的日期时,它可以完美地工作,但对于日期"31/02/1393",它会抛出错误。这两个日期都是有效的贾拉利/波斯日期。
我认为这个问题发生了,因为不知何故应用程序考虑到这个日期是英语的,在英语日历的第二个月没有任何31天。请帮我找到解决方案。
static public bool ValidateParsianDate(string date)
{
bool status = true;
try
{
PersianCalendar persianCalendar = new PersianCalendar();
CultureInfo persianCulture = new CultureInfo("fa-IR");
DateTime persianDateTime = DateTime.ParseExact(date, "dd/MM/yyyy", persianCulture);
}
catch (Exception ex)
{
string msg = ex.Message;
status = false;
}
return status;
}
谢谢,认为,
Rajeev
使用PersianCalendar.ToDateTime(
int year,
int month,
int day,
int hour,
int minute,
int second,
int millisecond,
int era
)
方法
static public bool ValidateParsianDate(string date)
{
bool status = true;
try
{
PersianCalendar persianCalendar = new PersianCalendar();
var dateParts = date.Split(new char[] { '/' }).Select(d=> int.Parse(d)).ToArray();
var date = persianCalendar.ToDateTime(dateParts[2], dateParts[1], dateParts[0], 0, 0,0,0, /*8 era of year here **/);
}
catch (Exception ex)
{
string msg = ex.Message;
status = false;
}
return status;
}
因为persianCulture.Calendar
在。net框架中默认设置为GregorianCalendar
,不使用反射不能更改为PersianCalendar
。更多信息在这里
我有这个问题,但我使用这个,它的工作
public static bool IsValidDate(string date)
{
var regex = new Regex("^''d{ 4 } /''d{ 2}/''d{ 2}$");
var arrPattern = new[] {
new Regex("^''d{4}/''d{2}/''d{2}$"),
new Regex("^''d{ 4 } /''d{ 2}/''d{ 1}$"),
new Regex("^''d{ 4 } /''d{ 1}/''d{ 2}$"),
new Regex("^''d{ 4 } /''d{ 1}/''d{ 1}$"),
new Regex("^''d{ 2 } /''d{ 2}/''d{ 2}$"),
new Regex("^''d{ 2 } /''d{ 2}/''d{ 1}$"),
new Regex("^''d{ 2 } /''d{ 1}/''d{ 2}$"),
new Regex("^''d{ 2 } /''d{ 1}/''d{ 1}")
};
const int kabise = 1387;
var year = 0;
var mounth = 0;
var day = 0; var flag = false;
foreach (var t in arrPattern)
{
if (t.IsMatch(date))
flag = true;
}
if (flag == false) return flag;
//جدا کننده تاریخ می تواند یکی از این کاراکترها باشد
var splitDate = date.Split('/','-',':');
year = Convert.ToInt32(splitDate[0]);
mounth = Convert.ToInt32(splitDate[1]);
day = Convert.ToInt32(splitDate[2]);
if (mounth > 12 || mounth <= 0)
flag = false;
else
{
if (mounth< 7)
{
if (day > 31)
{
flag = false;
}
}
if (mounth != 12) return flag;
var t = (year - kabise) % 4;
if ((year - kabise) % 4 == 0)
{
if (day >= 31)
flag = false;
}
else if (day >= 30)
flag = false;
}
return flag;
}