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があります。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");
于 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

コメントのようにフォーマットを指定したので、文字列からyyyyMMddトリミングする必要がありPMますAM

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 に答える
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 に答える