Как преобразовать дату/время из длинного (миллисекунд) в формат RFC-822 в Java

У меня есть время в миллисекундах, мне нужно преобразовать его в формат RFC-822. Есть ли общая библиотека Java, которую я могу использовать? Как лучше всего это сделать?

Пример времени в миллисекундах: 1440612000000 Время в RFC-822: Среда, 02 октября 2002 г., 08:00:00 EST

Заранее спасибо.


person Renat Gatin    schedule 26.08.2015    source источник


Ответы (2)


Используйте SimpleDateFormat.

SimpleDateFormat dateFormat = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz");
dateFormat.setTimeZone(TimeZone.getTimeZone("EST")); //To use the EST time zone as in your example
dateFormat.format(new Date(timeInMiliseconds));

Например, с 1440612000000L выводится Wed, 26 Aug 2015 13:00:00 EST.

person eric.m    schedule 26.08.2015
comment
Спасибо, но я не могу жестко запрограммировать TimeZone. У меня есть приложение для Android, а что, если мои клиенты из разных часовых поясов? - person Renat Gatin; 26.08.2015
comment
Это должно было соответствовать вашему примеру, но вы можете удалить эту строку, если хотите. Затем он будет использовать часовой пояс системы. Если это не сработает, попробуйте вместо этого использовать TimeZone.getDefault(). - person eric.m; 26.08.2015
comment
Спасибо! Вы были максимально полезны! - person Renat Gatin; 26.08.2015
comment
Не могли бы вы также сказать мне, что такое формат RFC-822 по умолчанию? Потому что я вижу, кто-то использует EEE', 'dd' 'MMM' 'yyyy' 'HH:mm:ss' 'Z, еще один использует EEE, dd MMM yyyy HH:mm:ss zzz.. Какой формат для пример можно разобрать с помощью apache http-commons? - person Renat Gatin; 26.08.2015
comment
Я не знал о существовании RFC-822, пока вы не задали этот вопрос. Я просто отформатировал, как вы в своем примере, так как ничего не знаю об этом формате RFC-822. - person eric.m; 26.08.2015

Вы можете использовать класс календаря, включенный в Java:

Calendar calendar = Calendar.getInstance();
// set time in millis
calender.setTimeInMillis(millis);

int year       = calendar.get(Calendar.YEAR);
int month      = calendar.get(Calendar.MONTH); // Jan = 0, dec = 11
int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH); 
int dayOfWeek  = calendar.get(Calendar.DAY_OF_WEEK);
int weekOfYear = calendar.get(Calendar.WEEK_OF_YEAR);
int weekOfMonth= calendar.get(Calendar.WEEK_OF_MONTH);

int hour       = calendar.get(Calendar.HOUR);        // 12 hour clock
int hourOfDay  = calendar.get(Calendar.HOUR_OF_DAY); // 24 hour clock
int minute     = calendar.get(Calendar.MINUTE);
int second     = calendar.get(Calendar.SECOND);
int millisecond= calendar.get(Calendar.MILLISECOND);

System.out.println(sdf.format(calendar.getTime()));

System.out.println("year \t\t: " + year);
System.out.println("month \t\t: " + month);
System.out.println("dayOfMonth \t: " + dayOfMonth);
System.out.println("dayOfWeek \t: " + dayOfWeek);
System.out.println("weekOfYear \t: " + weekOfYear);
System.out.println("weekOfMonth \t: " + weekOfMonth);

System.out.println("hour \t\t: " + hour);
System.out.println("hourOfDay \t: " + hourOfDay);
System.out.println("minute \t\t: " + minute);
System.out.println("second \t\t: " + second);
System.out.println("millisecond \t: " + millisecond);

Затем вы можете просто построить строку из значений. Например. :

String s = calender.getDisplayName(Calender.DAY_OF_WEEK, Calender.SHORT, locale) + ", " + calender.get(Calender.DAY_OF_MONTH) + " " + calender.getDisplayName(Calender.MONTH, Calender.SHORT, locale) + " " + calender.get(Calender.YEAR);

напечатает: Wed, 02 Oct 2002

person TameHog    schedule 26.08.2015
comment
В дополнение к этому ответу также см. Joda-Time в качестве замены (имхо, лучше) для встроенного в Java класса Calendar. - person Matthew Herbst; 26.08.2015