我有两个字段:
string date1 = "04/26/10";
string date2 = "04/25/10";
如何比较这两个字段?:
if (date2 <= date1)
{
// perform some code here
}
这可以在没有先将字段转换为单独的日期类型变量的情况下完成吗?
编辑:我应该提到这些值来自数据库表,其中日期值以字符串格式开头。旧遗留代码......
答案 0 :(得分:40)
不,但在C#中转换为日期并不困难。
if ( DateTime.Parse(date2) <= DateTime.Parse(date1))
{
// perform some code here
}
答案 1 :(得分:13)
如果您的日期实际存储为在数据库中,那么您似乎无法确定它们在解析之前是否处于有效格式。出于这个原因,我建议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!
}
答案 2 :(得分:5)
至少你需要分开字符串,以便按照正确的顺序进行比较。
如果你想把它们保留为字符串,那么你需要用LARGEST-&gt; SMALLEST单位重新排序它们,所以这个:
yyyy/mm/dd
可以直接比较,但不能比较你的格式。使用您的格式,您需要将其拆分,并像上面一样重新组合,或者按照正确的顺序比较各个部分。
话虽如此,使用DateTime.ParseExact将字符串转换为DateTime相当容易。
答案 3 :(得分:2)
通常将日期作为字符串进行比较是个坏主意。
但如果您的字符串采用相同的格式(例如yyyy/mm/dd
表示年数,则为月数,则为天),则比较可能有效。
答案 4 :(得分:2)
可以通过字符串操作来完成,但它可以归结为有效地比较三组整数,这些整数作为字符串会比转换为日期时产生更多的开销。你为什么要那样做?
答案 5 :(得分:1)
没有。让.net框架为您排序。它将正确识别用户日期设置和格式(使用系统设置,当前线程)并确定哪个是月,年和日 - 特别是如果该数据来自例如sql server。
答案 6 :(得分:1)
在进行比较之前,最好先格式化日期。根据您的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
}
答案 7 :(得分:0)
最佳做法是避免将日期作为字符串类型进行比较,而是与 C# 的官方 DateTime
对象进行比较。
如果您的用例需要使用 string
对象进行比较,则:
以下是该方法在您的案例中的工作方式(使用 C# 在线编译器对此进行测试):
using System;
public class Program
{
public static void Main()
{
string fmt = "yyyymmdd";
string min = "20201206";
string max = "20210810";
Console.WriteLine(max.CompareTo(min)); // Output : 1
Console.WriteLine(min.CompareTo(max)); // Output : -1
string same1 = "20001212";
string same2 = "20001212";
Console.WriteLine(same1.CompareTo(same2)); // Output : 0
Console.WriteLine(same2.CompareTo(same1)); // Output : 0
// Summary:
// 1 = Greater than string param
// -1 = lesser than string param
// 0 = equals to string param
}
}