我使用这些代码转换当前日期时间,并使用用户在文本框中键入的日期时间减去它。但它在转换时会出错。
PersianCalendar p = new System.Globalization.PersianCalendar();
DateTime date = new DateTime();
date = DateTime.Parse(DateTime.Now.ToShortDateString());
int year = p.GetYear(date);
int month = p.GetMonth(date);
int day = p.GetDayOfMonth(date);
string str = string.Format("{0}/{1}/{2}", year, month, day);
DateTime d1 = DateTime.Parse(str);
DateTime d2 = DateTime.Parse(textBox9.Text);
string s = (d2 - d1).ToString().Replace(".00:00:00", "");
textBox10.Text = (d2 - d1).ToString().Replace(".00:00:00","");
将日期时间从字符串转换为日期时,此行将出错:DateTime d1 = DateTime.Parse(str);
请帮我解决这个问题。
提前致谢
10 回答
无需在此处解析日期。
编辑:
最初我只想用这个答案指出 OP 处理中的错误。但我认为一个完整的答案会更好(尽管延迟:))并且是的我知道中间日期表示看起来不像波斯日期。但它不是需要的。此代码在当前日期和用户输入日期之间给出了适当的区别。
只需在
PersianCalendar
类上使用ToDateTime
方法:然后以这种格式获取字符串,只需:
实际问题似乎在于解析用户以波斯日历格式输入的日期。因此,如果用户输入
1391/2/31
,您希望能够解析它。今天(2012 年 5 月 19 日)是1391/2/30
所以你最终想要显示像1 day remaining
这样的东西。这个问题有之前被问过。但是,那里接受的答案只是试图使用
这对于像
1391/2/31
这样的日期不起作用。所以我认为你必须自己实现解析。如果没有实现任何错误检查,并假设用户始终使用
yyyy/mm/dd
格式,您可以使用:您需要检查正则表达式是否真的找到了匹配项。您还必须检查
pc.ToDateTime
是否不会引发错误。不幸的是,似乎没有像波斯日历那样的DateTime.TryParse
。无论如何,你今天不需要解析为波斯日历,你只需要解析用户输入。
您可能也对波斯图书馆 - 使用日期,日历和 DatePickers感兴趣,即使该文章非常陈旧(2007)。
我解决了这个问题。这是因为在某些月份有例外,所以如果你想减去彼此的两个日期时间,你应该将两者都转换为公历,然后你可以减去它们并看到结果。
这是代码:
这是您的朋友的文档:
PersianCalendar 类
DateTime 构造函数(Int32,Int32,Int32,日历)
这是您需要的确切代码:
最终,你想做什么?您在
textBox10
期待的结果是什么?如果你想要两个日期之间的天数,那么只需做(d2 - pDate).ToString("d")
就可以得到天数的差异。也许如果你进一步解释你想要做什么,而不是你想要做什么,我们可以帮助你进一步。编辑:刚刚意识到了来自于什么。导致问题的那一行在这里:
相反,我们需要将其更改为也使用文化信息:
编辑:您是对的,它只允许以波斯语格式解析日期,但不会根据特定日历进行验证。为了使其正常工作,您将不得不手动解析日期并使用提供的 PersianCalendar 实例化新的 DateTime:
您只需确保输入与您指定的格式完全匹配,否则无法一致地解析 DateTime。
您可以使用此代码:
如果你从另一个中减去一个,你得到一个 TimeSpan。
您可以使用此时间范围的属性以您喜欢的方式显示它们。
要管理转换 form/to 波斯日历,您可以在此处找到一个很好的解决方案:
.NET 如何将 Persian(Jalali 日历)的日期字符串解析为 DateTime 对象?
参考文献:
DateTime.Today
时间跨度
这是我正在使用的代码:
使用野田时间可以更轻松地完成此操作:
您还可以使用以下.net 库来像使用 DateTime 一样简单地使用 PersianCalendar:
C#中的波斯语 Calendar(PersianDateTime)
试试这段代码:这段代码是由“grzegorz W”发布的编辑代码,但是他的代码生成错误,例如当用户输入日期=“1394/06/31”并且错误是“年,月,日参数描述 un-representable DateTime”时
下面的代码是好的: