Преобразование формата даты в Java?

#java #android

#java #Android

Вопрос:

У меня есть дата, поступающая в виде каналов JSON в формате ниже:

  mm/dd/yyyy  for example today's date  10/26/2011
  

Я хочу преобразовать его в другой формат, то есть ввести подробный формат даты как:

  Wed, 26 OCT 2011
  

Как я могу это сделать ..??? Я знаю, что это может быть очень просто, но я все еще новичок, любая помощь приветствуется.

Ответ №1:

Это не очень познавательно, но вот решение, готовое обработать ваш запрос:

 String dateString = "10/26/2011";
String dateStringParsed = "";
SimpleDateFormat format1 = new SimpleDateFormat("MM/dd/yyyy");
SimpleDateFormat format2 = new SimpleDateFormat("EEE, dd MMM yyyy");

try {
    Date parsed = format1.parse(dateString);
    dateStringParsed = format2.format(parsed);
}
catch(ParseException pe) { 
    //handle the exception
}
  

AFAIK, заглавные буквы в месяце недоступны через SimpleDateFormat. Вам придется изменить его вручную, если это необходимо.

Комментарии:

1. 1 за то, что позволил OP обрабатывать исключение так, как ему нужно, и предоставлять правильные шаблоны.

2. Спасибо. Приятно набрать несколько очков от опытного пользователя;)

3. @ Moyshe, я знаю, что это не очень познавательно, но я запутался с форматами. Спасибо за сотрудничество ..!!!!

4. Нет проблем — это то, с чего взят этот сайт. Хотя, потратьте некоторое время на просмотр ссылок, приведенных в других ответах, они очень полезны.

Ответ №2:

Вот пример, в котором я делаю именно это в своем приложении для Android.

 public String GetJustTime(String input){
    SimpleDateFormat curFormater = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
    Date dateObj = new Date();
        try {
            dateObj = curFormater.parse(input);
        } catch (ParseException e) {}
        SimpleDateFormat postFormater = new SimpleDateFormat("h:mm a");
        String newDateStr = postFormater.format(dateObj);

    return newDateStr;
}
  

Просто измените строку формата 2 в соответствии с вашими потребностями.
Первый предназначен для входящего формата, а второй — формат, используемый для вывода.

Я полагаю, что формат вывода, который вы хотите, это «EEE, d МММ ГГГГ», но я не могу проверить его прямо сейчас.

Комментарии:

1. Знаете ли вы, что если переданный ввод не является допустимой датой в соответствии с curFormater, то вы просто вернете текущую дату вместо той, которая была передана в качестве аргумента? Это серьезный побочный эффект, который в большинстве случаев нежелателен.

2. да, это желаемое поведение в моем приложении. Как я уже сказал, это произошло прямо из моего кода. Спасибо, что упомянули об этом, я ценю это.

3. И ваш первый шаблон неверен, потому что он использует минуты вместо месяцев. И вы не уважаете соглашения об именовании Java.

4. хорошо, это может быть проблемой для меня .. хотя я пока не видел никаких проблем. еще раз спасибо. Собираюсь воспользоваться этим первым шансом, который я получу.

5. на самом деле, я знаю, почему это еще не появилось… Я полностью игнорирую часть даты и только выводю время, поэтому это ни на что не влияет. В любом случае это исправлено.

Ответ №3:

В дополнение к решениям с SimpleDateFormat, я просто хотел добавить альтернативное решение с помощью DateTimeFormatter ( org.joda.time.format.DateTimeFormatter ) от Joda, которое обычно считается гораздо лучшим API даты / времени, если вы в конечном итоге делаете что-то хоть немного продвинутое с датами или временем в своем коде. Это решение на самом деле может быть встроено в одну строку, но для наглядности здесь показано разбитое:

 String source = "10/26/2011";
String target = "Wed, 26 Oct 2011";

DateTimeFormatter sourceFormatter = DateTimeFormat.forPattern("MM/dd/yyyy");
DateTimeFormatter targetFormatter = DateTimeFormat.forPattern("E, dd MMM yyyy");

assertEquals(target, sourceFormatter.parseDateTime(source).toString(targetFormatter));
  

Ответ №4:

Вы можете взглянуть на класс SimpleDateFormat . Один небольшой пример того, как вы можете это использовать, взят отсюда:

 String dateString = new String("07/12/2005");
java.util.Date dtDate = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yy");
SimpleDateFormat sdfAct = new SimpleDateFormat("dd/mm/yyyy");
try
{
  dtDate = sdfAct.parse(dateString);
  System.out.println("Date After parsing in required format:" (sdf.format(dtDate)));
}
catch (ParseException e)
{
  System.out.println("Unable to parse the date string");
  e.printStackTrace();
}
  

Комментарии:

1. Второй формат неверен. Вместо месяцев используются минуты. Ваша обработка исключений ужасна.

2. Я думаю, что он получил свой пример из того же места, где я изначально получил свой 🙂 Это выглядит очень знакомо.

3. Я получил пример с другого веб-сайта, на который я ссылался в своем ответе. Я не писал код, я просто хотел указать OP в правильном направлении…