#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 в правильном направлении…