タイムゾーン (TZ) の処理は、他の人が省略した主要な事項の 1 つです。SimpleDateFormat を使用して日付の文字列表現に出入りするときはいつでも、扱っている TZ を認識する必要があります。SimpleDateFormat で TZ を明示的に設定しない限り、書式設定/解析時にデフォルトの TZ が使用されます。デフォルトのタイムゾーンで日付文字列のみを処理しない限り、問題が発生します。
入力日付は GMT の日付を表しています。出力を GMT としてフォーマットする必要があると仮定すると、SimpleDateFormat で TZ を設定する必要があります。
public static void main(String[] args) throws Exception
{
String inputDate = "Tue Mar 19 00:41:00 GMT 2013";
// Initialize with format of input
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy");
// Configure the TZ on the date formatter. Not sure why it doesn't get set
// automatically when parsing the date since the input includes the TZ name,
// but it doesn't. One of many reasons to use Joda instead
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
Date date = sdf.parse(inputDate);
// re-initialize the pattern with format of desired output. Alternatively,
// you could use a new SimpleDateFormat instance as long as you set the TZ
// correctly
sdf.applyPattern("yyyy-MM-dd HH:mm:ss");
System.out.println(sdf.format(date));
}