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 DATE。请让我知道如何继续。

问候,
香娜

4

5 回答 5

6

那是什么格式?"yyyyMMddtt"?

有带日期的 AM PM。没有时间陪上午/下午。所以我假设上午是 00:00:00,下午是 12:00:00

首先更正您的格式,然后使用它

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

然后

temp.Min("yyyyMMddtt");

temp.Max("yyyyMMddtt");
于 2012-07-04T07:56:36.253 回答
4

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

 nameList.Max()

如果您有一年加上小时/分钟和 AM/PM,那么您必须解析为 DateTime。正如其他答案中所建议的那样,我建议无论如何都进行解析。

于 2012-07-04T07:59:50.817 回答
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();
于 2012-07-04T07:55:35.330 回答
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();
于 2012-07-04T08:07:11.687 回答
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());

这会给你:

2012 年 6 月 18 日上午 12:00:00 2012 年 7 月 2 日上午
12:00:00

于 2012-07-04T09:23:42.183 回答