File: src/main/java/org/joda/time/format/DateTimeFormatterBuilder.java
Issue: #126 Errors creating/parsing dates with specific time zones.
Consider the following test code using Joda 2.0
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import java.util.Set;
public class JodaDateTimeZoneTester {
private static DateTimeFormatter formatter = DateTimeFormat.forPattern("MM/dd/yyyy HH:mm:ss.SSS ZZZ");
private static int numTimeZonesTested = 0;
private static int numTimeZonesPassed = 0;
private static int numTimeZonesFailed = 0;
private static int numTimeZonesException = 0;

private static String convertDateTimeToFormattedString(DateTime dateTime) {
    return formatter.print(dateTime);
}

private static DateTime parseStringToDateTime(String formattedDateTime) {
    return formatter.parseDateTime(formattedDateTime);
}

private static void testDateTimeFormatter(DateTime dateTime, String timeZone) {
    numTimeZonesTested++;

    final String dateTimeZoneId = dateTime.getZone().getID();

    if (!timeZone.equals(dateTimeZoneId)) {
        numTimeZonesFailed++;
        System.out.println(timeZone + " failed to construct into the proper date time zone - constructed time zone = " + dateTimeZoneId);
        return;
    }
    try {
        DateTime convertedDateTime = parseStringToDateTime(convertDateTimeToFormattedString(dateTime));

        if (dateTime.equals(convertedDateTime)) {
            numTimeZonesPassed++;
            //System.out.println(dateTime.getZone().getID() + " passed.");
        } else {
            numTimeZonesFailed++;
            System.out.println("Formatter failed for time zone ID: " + dateTimeZoneId + "    converted it to: " + convertedDateTime.getZone().getID());
        }
    } catch (IllegalArgumentException iae) {
        numTimeZonesException++;
        System.out.println("Formatter threw exception for time zone id: " + dateTimeZoneId);
    }
}

public static void main(String[] args) {
    Set<String> timeZones = DateTimeZone.getAvailableIDs();

    for (String timeZone : timeZones) {
        testDateTimeFormatter(DateTime.now().withZone(DateTimeZone.forID(timeZone)), timeZone);
    }

    System.out.println();
    System.out.println("Number of Time Zones tested: " + numTimeZonesTested);
    System.out.println("Number passed:     " + numTimeZonesPassed);
    System.out.println("Number failed:     " + numTimeZonesFailed);
    System.out.println("Number exceptions: " + numTimeZonesException);
    System.out.println();
}

}
The results are out of 572 time zones 130 fail and 30 throw exceptions. 
The failures are the most interesting. When I query DateTimeZone to get its time zone ids I will get a time zone like America/Atka. When I take that id and create a date time with it its time zone id is America/Adak. It is like there are multiple list of time zones in Joda time and they are out of sync. 
Source code is attached.

Buggy code:
public int parseInto(DateTimeParserBucket bucket, String text, int position) {
    String str = text.substring(position);
    for (String id : ALL_IDS) {
        if (str.startsWith(id)) {
            bucket.setZone(DateTimeZone.forID(id));
            return position + id.length();
        }
    }
    return ~position;
}

Fixed code:
public int parseInto(DateTimeParserBucket bucket, String text, int position) {
    String str = text.substring(position);
    String best = null;
    for (String id : ALL_IDS) {
        if (str.startsWith(id)) {
        	if (best == null || id.length() > best.length()) {
        		best = id;
        	}
        }
    }
    if (best != null) {
        bucket.setZone(DateTimeZone.forID(best));
        return position + best.length();
    }
    return ~position;
}