C# Sort DateTime List

DateTime type illustration

How can you sort a List of DateTime values in your C# program based on the year or month? It is sometimes necessary to sort DateTimes from most recent to least recent, and also vice versa. For some programs, sorting based on the month is also useful.

Sort values

First, this program creates List of four DateTime values. Next, it calls the four Sort custom methods. The Sort custom methods internally call the List.Sort method: they provide a Comparison delegate implementation as a lambda expression. The Comparison implementation returns the result of the CompareTo method on the two arguments.

Comparison Delegate Lambda Expression

This C# example program shows how to sort a List of DateTimes. The values are sorted chronologically.

Program that sorts List of DateTimes [C#]

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
	var list = new List<DateTime>();
	list.Add(new DateTime(1980, 5, 5));
	list.Add(new DateTime(1982, 10, 20));
	list.Add(new DateTime(1984, 1, 4));
	list.Add(new DateTime(1979, 6, 19));

	Display(SortAscending(list), "SortAscending");
	Display(SortDescending(list), "SortDescending");
	Display(SortMonthAscending(list), "SortMonthAscending");
	Display(SortMonthDescending(list), "SortMonthDescendeing");

    }

    static List<DateTime> SortAscending(List<DateTime> list)
    {
	list.Sort((a, b) => a.CompareTo(b));
	return list;
    }

    static List<DateTime> SortDescending(List<DateTime> list)
    {
	list.Sort((a, b) => b.CompareTo(a));
	return list;
    }

    static List<DateTime> SortMonthAscending(List<DateTime> list)
    {
	list.Sort((a, b) => a.Month.CompareTo(b.Month));
	return list;
    }

    static List<DateTime> SortMonthDescending(List<DateTime> list)
    {
	list.Sort((a, b) => b.Month.CompareTo(a.Month));
	return list;
    }

    static void Display(List<DateTime> list, string message)
    {
	Console.WriteLine(message);
	foreach (var datetime in list)
	{
	    Console.WriteLine(datetime);
	}
	Console.WriteLine();
    }
}

Output

SortAscending
6/19/1979 12:00:00 AM
5/5/1980 12:00:00 AM
10/20/1982 12:00:00 AM
1/4/1984 12:00:00 AM

SortDescending
1/4/1984 12:00:00 AM
10/20/1982 12:00:00 AM
5/5/1980 12:00:00 AM
6/19/1979 12:00:00 AM

SortMonthAscending
1/4/1984 12:00:00 AM
5/5/1980 12:00:00 AM
6/19/1979 12:00:00 AM
10/20/1982 12:00:00 AM

SortMonthDescendeing
10/20/1982 12:00:00 AM
6/19/1979 12:00:00 AM
5/5/1980 12:00:00 AM
1/4/1984 12:00:00 AM
Note

Results. You can see how the Ascending methods order the data from low to high, and the Descending methods do the opposite. Also, the SortMonth methods sort based on the month value of the DateTimes.

Summary

We looked at a way you can sort a List of DateTime instances in your C# program. It is also possible to sort with a query expression—this syntax might be clearer for some programmers.

Time Representations
.NET