Решение SimpleDateFormat работает, хотя я заметил, что файлы cookie не были удалены в то время, как я ожидал. Кажется, он напечатал время по местному времени, а средство форматирования - по Гринвичу. Если для объекта календаря выбран часовой пояс GMT и используется String.format, он будет отформатирован в нужном часовом поясе.
// Your values here
String name = "test";
String value = "test";
String path = "/";
int maxAge = 60;
StringBuilder sb = new StringBuilder();
sb.append(name);
sb.append("=");
sb.append(value);
sb.append("; path=");
sb.append(path);
Calendar cal = Calendar.getInstance();
cal.setTimeZone(TimeZone.getTimeZone("GMT"));
cal.add(Calendar.SECOND, maxAge);
sb.append("; Expires=");
sb.append(String.format(Locale.US, "%1$ta, %1$td-%1$tb-%1$tY %1$tH:%1$tM:%1$tS GMT", cal));
sb.append("; Max-Age=");
sb.append(maxAge);
response.setHeader("Set-Cookie", sb.toString());