2012-07-04 49 views
0

我有如下
敏时间和最大日期

List<string> nameList = new List<string>(); 
nameList.Add("20120618PM"); 
nameList.Add("20120622PM"); 
nameList.Add("20120622AM"); 
nameList.Add("20120628PM"); 
nameList.Add("20120702PM"); 
nameList.Add("20120629AM"); 
nameList.Add("20120629PM"); 

我想从列表中查找MAXDATE和MIN日期。请让我知道我可以继续日期的列表。

问候,

+4

你有一个字符串列表,你的第一个问题是将它们转换为日期。它们似乎是早上或下午进一步区分的日期。如果你可以定义如何将'strings'解析为'DateTimes',那么它就是一个微不足道的问题。我可以看到几个合乎逻辑的可能性。 – Jodrell

+1

只需使用比字符串更好的数据类型作为日期,它应该很容易。 –

+3

什么是格式?是YYYYMMDD还是年份? – Habib

回答

4

如果日期格式YYYYMMDD则是可排序的,即使AM串/ PM

nameList.Max() 

如果你有一年多小时/分钟和AM/PM,那么你必须分析ŧ o DateTime。我建议解析不管,如其他答案中所建议的。

+0

是的。增加了关于这个的一个笔记(需要24小时,而不是上午/下午)。在旁注中不可排序的日期格式应该被禁止;) –

+0

事实上,我认为它是可排序的,因为它是yyyyMMdd,因此AM在任何给定日期之前在PM之前。所以我的原始公式实际上成立。 –

+0

实际上,我们的编码器需要使用'DateTime'! –

2
// 1. Convert your string list to datetimes 
IEnumerable<DateTime> dates = nameList.Select(m => DateTime.Parse(m, yourFormatProvider)); 

// 2. Get first and last date 
DateTime maxDate = dates.Max(); 
DateTime minDate = dates.Min(); 
+0

我不认为你可以'联合'DateTime'与另一个'DateTime'。 – Rawling

+0

@Rawling我很抱歉,你是对的。我斋戒我改变了它。谢谢 – hwcverwe

+0

为什么要创建一个新的'List':'new [] {dates.Max(),dates.Min()}'更好?或者更好 - var min = dates.Min(); var max = dates.Max();'还有一个关于字符串解析的问题 - DateTime.Parse不会解析这些字符串。 'ParseExact'更好。 –

6

格式是什么呢? "yyyyMMddtt"

有上午下午与日期。没有时间陪AM/PM。所以我假设AM为00:00:00和PM是12:00:00

首先纠正你的格式,然后用这个

List<DateTime> temp = nameList.Select(x => 
DateTime.ParseExact(x, "yyyyMMddtt", CultureInfo.InvariantCulture)).ToList(); 

然后

temp.Min("yyyyMMddtt"); 

temp.Max("yyyyMMddtt"); 
+0

'DateTime.Parse'会对这些字符串起作用吗? – Rawling

+0

我想'也许'ParseExact'?另外,ToString不需要'PM' –

+0

另外,“PM”不会以“PM”出现,而会以“P”{月数}出现。 – Rawling

1

如果我不得不猜测,看起来我是这么做的。既然你指定的格式在您的评论yyyyMMdd我会做这个

var dates = nameList.ConvertAll(s => { 
     var dateString = s.SubString(6); 
     var timeString = s.SubString(7, 2); 

     var date = DateTime.Parse(dateString); 

     if (timeString == "PM") 
     { 
      date = date.AddHours(12); 
     } 

     return date; 
    }); 

var max = date.Max(); 
var min = date.Min(); 
+0

@jordell:谢谢大家。 – Channa

+0

@Channa随时提供点赞 – Jodrell

1

,你需要修剪PMAM从字符串

List<DateTime> dateList = 
    nameList.Select(x => 
    DateTime.ParseExact(
         x.TrimEnd("PM".ToCharArray()).TrimEnd("AM".ToCharArray()), 
        "yyyyMMdd", 
         CultureInfo.InvariantCulture) 
        ).ToList(); 

      var Minimum = dateList.Min(); 
      var Maximum = dateList.Max(); 
      Console.WriteLine(Minimum.ToString()); 
      Console.WriteLine(Maximum.ToString()); 

这会给你:

6/18/2012 12:00:00 AM
7/2/2012 12:00:00 AM

相关问题