Я рекомендую использовать Mime4J .
Библиотека предназначена для разбора всех видов ерунды электронной почты.
Для разбора дат вы должны использовать DateTimeParser .
int zone = new DateTimeParser(new StringReader("Fri, 27 Jul 2012 09:13:15 -0400")).zone();
После этого я обычно конвертирую datetime в DateTime Джоды . Не используйте SimpleDateFormatter, поскольку он не охватывает все случаи для RFC822.
Ниже вы получите Joda TimeZone (из зоны int выше), который превосходит Java TZ.
// Stupid hack in case the zone is not in [-+]zzzz format
final int hours;
final int minutes;
if (zone > 24 || zone < -24 ) {
hours = zone / 100;
minutes = minutes = Math.abs(zone % 100);
}
else {
hours = zone;
minutes = 0;
}
DateTimeZone.forOffsetHoursMinutes(hours, minutes);
Теперь единственная проблема заключается в том, что часовой пояс, который вы получите, всегда будет числовым часовым поясом, который все еще может быть неправильным часовым поясом пользователя, отправляющего электронное письмо (при условии, что почтовое приложение отправило пользователям TZ, а не только UTC) .
Например, -0400 не является EDT (т. Е. America / New_York), потому что не учитывает переход на летнее время.