Sure, there's the Doomsday Algorithm, but there is also a mathematical formula for determining the day of the week which is useful for working out on paper or in a computer program. Here's a simple C/C++-like function for finding the day of the week from any given date (there is a walk-through at the bottom for those of you who are not programmers). The day of the week is returned as an integer with:

Since there are numerous calendar systems, in addition to calculating based simply on the month, day, and year, there is a fourth argument allows the function to compute the day of the week for any number of systems as opposed to just the values for the Gregorian Calendar most commonly used today.

Examples:

// Begin code

int getDayOfWeek(int month, int day, int year, int CalendarSystem)
{
     // CalendarSystem = 1 for Gregorian Calendar
     if (month < 3)
     {
           month = month + 12;
           year = year - 1;
     }
     return (
             day
             + (2 * month)
             + int(6 * (month + 1) / 10)
             + year
             + int(year / 4)
             - int(year / 100)
             + int(year / 400)
             + CalendarSystem
            ) % 7;
}

// End code

For you non-programmers, here is an example:

Let's say you are trying to determine what day of the week New Years Day fell on in 1900. Since we know this happened on January 1, 1900, we just fill in the numbers based on the information above:

month          =    1
day            =    1
year           = 1900
CalendarSystem =    1 (Gregorian Calendar)
if (month < 3)
{
     month = month + 12;
     year = year - 1;
}
Since the month is 1 (which is less than 3) we add 12 to the month and subtract 1 from the year
month          =   13
day            =    1
year           = 1899
CalendarSystem =    1 (Gregorian Calendar)
return (
     day
     + (2 * month)
     + int(6 * (month + 1) / 10)
     + year
     + int(year / 4)
     - int(year / 100)
     + int(year / 400)
     + CalendarSystem
     ) % 7;

Now just substitute the values in and calculate. It should be noted that int(x) just means to convert the number to an integer by removing the decimal part of the number (do not round the number, just remove the decimal)

(1 + (2 * 13) + int(6 * (13 + 1) / 10) + 1899 + int(1899 / 4) - int(1899 / 100) + int(1899 / 400) + 1) modulus 7
Reduces to: (1 + 26 + int(8.4) + 1899 + int(474.75) - int(18.99) + int(4.7475) + 1) modulus 7
Reduces to: (27 + 8 + 1899 + 474 - 18 + 4 + 1) modulus 7
Reduces to: 2395 modulus 7

Modulus simply means to take the remainder after dividing, so 2395/7 = 342 R 1, so the day of the week is 1. From the list at the top of the writeup, you will see that this equates to Monday.