我有两个领域:有没有办法在C#中比较日期“字符串”而不转换字符串?
string date1 = "04/26/10";
string date2 = "04/25/10";
我怎样才能比较喜欢这两个字段,以便?:
if (date2 <= date1)
{
// perform some code here
}
可以这样不先转换领域的独立日期类型的变量做了什么?
编辑:我应该提到这些值来自数据库表中日期值是以字符串格式开始的。旧的遗留代码...
我有两个领域:有没有办法在C#中比较日期“字符串”而不转换字符串?
string date1 = "04/26/10";
string date2 = "04/25/10";
我怎样才能比较喜欢这两个字段,以便?:
if (date2 <= date1)
{
// perform some code here
}
可以这样不先转换领域的独立日期类型的变量做了什么?
编辑:我应该提到这些值来自数据库表中日期值是以字符串格式开始的。旧的遗留代码...
不,但它不难转换为C#中的日期。
if (DateTime.Parse(date2) <= DateTime.Parse(date1))
{
// perform some code here
}
至少需要挑选字符串以便按照正确的顺序进行比较。
如果你想留下他们作为字符串,那么你需要用LARGEST->最小单位重新排序,所以这一点:
yyyy/mm/dd
可以直接进行比较,而不是你的格式。使用你的格式,你需要分割它,并且像上面那样重新组合它,或者按照正确的顺序比较各个部分。
话虽如此,使用DateTime.ParseExact将字符串转换为DateTime相当容易。
通常将日期作为字符串进行比较是一个坏主意。
但是,如果您的字符串格式相同(例如,yyyy/mm/dd
表示年,那么monthes然后天),则比较可能是有效的。
它可以通过字符串操作来完成,但它会降低到有效比较三组整数,因为字符串会导致比转换日期时间更多的开销。你为什么想这么做?
不需要让.net框架为您排序。它将正确识别用户日期设置和格式(使用系统设置,当前线程)并确定哪一天是月份,年份和日期 - 特别是如果该数据来自例如sql服务器。
如果您的日期实际上是以字符串存储在数据库中,那么您似乎无法确定它们在解析之前会处于有效格式。出于这个原因,我建议在jle的答案上有一个小的变化:
DateTime d1, d2;
if (DateTime.TryParse(date1, out d1) &&
DateTime.TryParse(date2, out d2) &&
d2 <= d1)
{
// perform some code here
}
else
{
// strings didn't parse, but hey,
//at least you didn't throw an exception!
}
在进行比较之前最好格式化日期。根据您的cultureinfo,比较日期的最安全方法是将日期字符串格式化为“yyyy-mm-dd”。
DateTime d1, d2;
string date1 = "04/26/10";
string date2 = "04/25/10";
d1 = DateTime.Parse(date1.ToString("yyyy-MM-dd"));
d2 = DateTime.Parse(date2.ToString("yyyy-MM-dd"));
if (d1 > d2)
{
//do something
}
是的,看起来很简单。我想我必须有单独的变量和转换后的日期值,但是你显示的方式让我可以解决这些额外的变量。谢谢! – Kevin 2010-04-26 11:22:39
@凯文,只是要小心你的文化设置 - 如果你使用不同的文化(默认或偶然)转换美国日期时间,你可能会以意想不到的结果:) – RYFN 2010-04-26 11:42:02
感谢您的单挑,宙斯。该程序只是一个小批量程序,将在我们的服务器上经常运行。它将基本上读取数据库表,比较两个字符串字段(这些字段包含我的问题中的日期),并根据比较结果更新同一记录中的另一个字段。该程序将永远不会在国家以外的任何地方运行,或者在文化设置未设置为“美国”的服务器上运行。 – Kevin 2010-04-26 11:46:13