最短日期和最长日期

时间:2012-07-04 07:53:58

标签: c#

我的日期列表如下

 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 DATE。请告诉我如何继续。

的问候,

5 个答案:

答案 0 :(得分:6)

那是什么格式? "yyyyMMddtt"

AM PM有约会。没有时间陪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");

答案 1 :(得分:4)

如果日期格式为yyyyMMdd,那么即使使用AM / PM也可以将其排序为字符串

 nameList.Max()

如果您有一年加上小时/分钟和上午/下午那么您必须解析为DateTime。无论如何,我都建议解析,如其他答案所示。

答案 2 :(得分: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();

答案 3 :(得分:1)

如果我不得不猜,我似乎在做什么。我会这样做

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();

答案 4 :(得分:1)

由于您已在评论中将格式指定为yyyyMMdd,因此需要从字符串中裁剪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