2013-03-16 87 views
0

我有这样的数据表中的结果在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),这应该是3/13/2013。另请注意,此列是字符串数据类型。

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

回答

1

使用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); 
+0

哇蒂姆,你是大师!谢谢,它的工作原理!我从Excel工作表中导出这些数据,导出后,数据表显示此列为字符串数据类型。 – user1254053 2013-03-16 12:51:25

+0

您好@tim如果一天的字段为“2012年4月1日”?最大日期将采取此 – 2013-05-24 06:29:47

+0

@Praveen:那是什么日期,1月的四月或四月的第一?你试过了吗?其实我不明白你的问题。 – 2013-05-24 06:41:24

0

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

DateTime format mismatch on importing from Excel Sheet

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