1

我在 c# 中有这个数据表结果

DAY      Employee Job1   Job2   Job3
1/1/2012    a    1      1      1 
1/1/2012    b    2      2      2
1/1/2012    c    2      1      4
1/1/2012    d    4      2      1
1/2/2012    a    3      2      5
1/2/2012    b    2      2      2
1/2/2012    c    3      3      3
1/2/2012    d    1      1      1
1/3/2013    a    5      5      5
1/3/2013    b    2      2      6
1/3/2013    c    1      1      1
3/13/2013   d    2      3      4
2/1/2013    a    2      2      2
2/1/2013    b    5      5      2
2/7/2013    c    2      2      2
2/5/2013    a    3      3      3
3/2/2013    b    2      3      3
2/1/2013    a    4      4      2

现在我想从第一列(MM/dd/yyyy)中找到最大日期,它应该是 2013 年 3 月 13 日。另请注意,此列是字符串数据类型。

拜托,任何人都可以建议我如何在 c# 中使用“Linq”来做到这一点,或者有没有简单的方法来做到这一点?

4

2 回答 2

2

使用DateTime.ParseDateTime.ParseExact将字符串解析为数据时间。这应该有效:

DateTime maxDate = table.AsEnumerable()
    .Max(r => DateTime.Parse(r.Field<string>("DAY")));

但是,为什么它首先是一个字符串?

编辑 您还应该考虑用于创建此字符串的文化。解析字符串时必须再次使用这种文化。

所以这个结果适用于不同的文化,但结果是不同的,你可以在这里看到:

System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US");
DateTime maxDate = table.AsEnumerable()
    .Max(r => DateTime.Parse(r.Field<string>("DAY")));
Console.WriteLine(maxDate);
System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("de-DE"); // germany
maxDate = table.AsEnumerable()
    .Max(r => DateTime.Parse(r.Field<string>("DAY")));
Console.WriteLine(maxDate);
于 2013-03-16T12:40:50.090 回答
0

即使程序是由同一家公司制作的,程序之间的格式化也会很烦人。这个线程是相似的,希望能给你指明正确的方向:

从 Excel 工作表导入时的日期时间格式不匹配

如果您已确认它是 a String,那么您是否尝试过简单的: DateTime dt = Convert.ToDateTime(date);

于 2013-03-16T12:08:29.733 回答