从DateTime列表中查找最高DateTime

时间:2011-04-25 09:01:53

标签: c# list datetime max

我的问题是,我想从DateTime列表中找到最高的DateTime?

我有一个数组假设string[] btime = new string[100];

在该数组中,我存储了来自SQL-Server的日期 SQL查询为[CONVERT(varchar(10),GETDATE(),101)],它以 MM / dd / yyyy 的格式返回日期 然后我将日期与我自己给定的时间连接起来 即.btime[j] = SqlServerDate + " " + 15:20;等等;

现在,从这个给定的数组我想找到最高的日期和时间

所以,我使用了这个逻辑

string large=""
large=btime[0];

 for (int i = 0; i < j; i++)
 {
    if (DateTime.Compare(DateTime.Parse(btime[i]),DateTime.Parse(large)) > 0)
    {
        large = btime[i];
    }
}

但我在

收到错误
if(DateTime.Compare(DateTime.Parse(btime[i]),DateTime.Parse(large)) > 0)

错误字符串无法识别为有效日期时间由于我的系统日期时间格式为 yyyy / dd / MM

,因此发生此错误

所以Plz任何人都可以帮助我解决这个问题 我不想改变系统的格式

6 个答案:

答案 0 :(得分:6)

其他人提出了解析DateTime的不同方法。这对我来说似乎毫无意义 - 如果您可以更改查询,只需避免首先执行转换为字符串。您使用的转换次数越少,此类问题出现问题的可能性就越小。

更改查询,以便最终得到DateTime值,然后在LINQ中找到最新的值是微不足道的:

DateTime latest = dateTimes.Max();

答案 1 :(得分:3)

呜呜,

// Containing your datetime field
string[] btime = new string[100];

var max = btime.Select(s => DateTime.Parse(s, "MM/dd/yyyy", CultureInfo.InvariantCulture)).Max();

答案 2 :(得分:0)

使用DateTime.ParseExact方法。 例如:

CultureProvider provider = CultureInfo.InvariantCulture;
DateTime.ParseExact(btime[i], "yyyy/dd/MM", provider);

答案 3 :(得分:0)

您可以使用DateTime.ParseExact()功能执行此操作。请参阅以下代码部分。

CurDate = DateTime.ParseExact(Name3, "yyyyMMddhhmmssffff", System.Globalization.CultureInfo.CurrentCulture, System.Globalization.DateTimeStyles.None)

答案 4 :(得分:0)

您可以使用DateTime.ParseExact() method

CultureProvider provider = CultureInfo.InvariantCulture;
DateTime.ParseExact(btime[i], "MM/dd/yyyy HH:mm", provider);

第二个参数是格式字符串。这指定了日期的格式。

由于你在最后增加24小时的时间,你需要HH:mm(HH表示期望24小时)。

答案 5 :(得分:0)

感谢大家。

我得到了某种答案:

string large = "";
large = btime[0];
IFormatProvider culture = System.Threading.Thread.CurrentThread.CurrentCulture;

// This Code will convert the System Format in Thread, Not the Actual Format 
// of The System
CultureInfo ciNewFormat = new CultureInfo(CultureInfo.CurrentCulture.ToString());
ciNewFormat.DateTimeFormat.ShortDatePattern = "MM/dd/yyyy";
System.Threading.Thread.CurrentThread.CurrentCulture = ciNewFormat;

for (int i = 0; i < TimeBackupCounter; i++)
{
    if (DateTime.Compare(DateTime.Parse(btime[i]),DateTime.Parse(large)) > 0)
    {
        large = btime[i];
    }
}