我在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”来做这件事,还是有一种简单的方法可以做到这一点?
答案 0 :(得分:2)
使用DateTime.Parse
或DateTime.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);
答案 1 :(得分:0)
即使程序是由同一家公司制作的,程序之间的格式化也很烦人。这个帖子很相似,希望能指出你正确的方向:
DateTime format mismatch on importing from Excel Sheet
如果你确认它是String
,那么你试过一个简单的:
DateTime dt = Convert.ToDateTime(date);
?