Конвертация формата даты Android
У меня есть строковая форма даты:
2011-03-27T09:39:01.607
и я хочу отформатировать его March 27, 2011
я использую
DateFormat[] formats = new DateFormat[] {
DateFormat.getDateInstance(), DateFormat.getDateTimeInstance(),
DateFormat.getTimeInstance(), };
String actDate= formats[0].format(uploadeddate.substring(0,9));
но это не работает.
Как мне конвертировать в March 27, 2011
?
8 ответов
Попробуй это
SimpleDateFormat form = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
java.util.Date date = null;
try
{
date = form.parse("2011-03-27T09:39:01.607");
}
catch (ParseException e)
{
e.printStackTrace();
}
SimpleDateFormat postFormater = new SimpleDateFormat("MMMMM dd, yyyy");
String newDateStr = postFormater.format(date);
сейчас newDateStr = March 27, 2011;
Может быть, это поможет?
String convertDate(String inputDate) {
DateFormat theDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = null;
try {
date = theDateFormat.parse(inputDate);
} catch (ParseException parseException) {
// Date is invalid. Do what you want.
} catch(Exception exception) {
// Generic catch. Do what you want.
}
theDateFormat = new SimpleDateFormat("MMM dd, yyyy");
return theDateFormat.format(date);
}
Ты можешь использовать android.text.format.DateFormat
в этом случае:
DateFormat.getMediumDateFormat(context).format(date);
String dateimput = "2011-03-27T09:39:01.607"
SimpleDateFormat formatrecived = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
SimpleDateFormat formarwanted = new SimpleDateFormat("MMMM dd, yyyy");
Date recived = formatrecived.parse(dateimput);
Date output = formatwanted.format(recived);
Примечание: dateimput вам нужно отформатировать в yyyy-MM-dd hh:mm:ss
используя замену и подстроку
Для получения AM или PM и 12-часового формата даты используйте hh:mm:ss a
в качестве форматирования строки, где hh
для 12-часового формата и a
для формата AM PM.
примечание ## ЧЧ в течение 24 часов и hh
для 12-часового формата даты.
SimpleDateFormat formatter = new SimpleDateFormat("mm/dd/yyyy hh:mm:ss a");
String newFormat = formatter.format(testDate);
пример
String date = "2011/11/12 16:05:06";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/mm/dd HH:MM:SS");
Date testDate = null;
try {
testDate = sdf.parse(date);
}catch(Exception ex){
ex.printStackTrace();
}
SimpleDateFormat formatter = new SimpleDateFormat("mm/dd/yyyy hh:mm:ss a");
String newFormat = formatter.format(testDate);
System.out.println(".....Date..."+newFormat);
public static String getFormatedDate(String strDate, String sourceFormate,
String destinyFormate) {
SimpleDateFormat df;
df = new SimpleDateFormat(sourceFormate);
Date date = null;
try {
date = df.parse(strDate);
} catch (ParseException e) {
e.printStackTrace();
}
df = new SimpleDateFormat(destinyFormate);
return df.format(date);
}
Назовите это как:
getFormatedDate(strDate, "yyyy-MM-dd HH:mm:ss", "mm/dd/yyyy");
Что вы хотите сделать, это создать формат для вашей даты, чтобы иметь возможность разобрать дату в соответствии с вашими желаниями.
Хорошо отформатированный формат должен точно соответствовать формату вашей временной метки, а затем я создал другой формат для отображения даты, которую я хочу, и затем проанализировал ее.
Ознакомьтесь с документацией, чтобы узнать, что именно нужно использовать для форматирования, а затем что использовать для разбора. Как только я понял это, стало намного легче.
Пример кода с использованием библиотеки Joda-Time.
DateTime dateTime = new DateTime( "2011-03-27T09:39:01.607", DateTimeZone.forID( "Asia/Kolkata" ) );
DateTimeFormatter formatter = DateTimeFormat.forStyle( "M-" );
String output = formatter.withLocale( java.util.Locale.ENGLISH ).print( dateTime );
Я хотел бы предложить современный ответ.
java.time и ThreeTenABP
DateTimeFormatter dateFormatter
= DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG);
String uploadeddate = "2011-03-27T09:39:01.607";
LocalDateTime ldt = LocalDateTime.parse(uploadeddate);
String actDate = ldt.format(dateFormatter);
System.out.println(actDate);
Когда я установил для себя английский язык по умолчанию и запустил этот фрагмент, результат был именно таким, как вы просили:
27 марта 2011 г.
Я использую тот факт, что ваша строка находится в стандартном формате ISO 8601 и что классы java.time анализируют этот формат по умолчанию. Обычно при переформатировании даты / времени строки из одного формата в другой, используются два форматтеры, который определяет формат, чтобы преобразовать из и один для формата для преобразования в. Но так как ваш исходный формат используется по умолчанию, мы можем обойтись только одним форматером.
Что пошло не так в вашем коде?
- Ваш подсчет неверен:
uploadeddate.substring(0,9)
дает тебе2011-03-2
где, я уверен, ты намеревался2011-03-27
. - Вы прошли
String
кformats[0].format()
, но не может форматировать строку. Он принимает либоDate
илиLong
, поэтому вам нужно было сначала преобразовать в один из них. Код компилируется, но выдаетjava.lang.IllegalArgumentException: Cannot format given Object as a Date
.
Вопрос: Могу ли я использовать java.time на Android?
Да, java.time прекрасно работает на старых и новых устройствах Android. Просто требуется как минимум Java 6.
- В Java 8 и новее, а также на новых устройствах Android (начиная с уровня API 26) современный API встроен.
- В Java 6 и 7 используйте ThreeTen Backport, бэкпорт современных классов (ThreeTen для JSR 310; см. Ссылки внизу).
- На (более старом) Android используйте Android-версию ThreeTen Backport. Это называется ThreeTenABP. И убедитесь, что вы импортируете классы даты и времени из
org.threeten.bp
с подпакетами.
Ссылки
- Учебник Oracle: Date Time, объясняющий, как использовать java.time.
- Запрос спецификации Java (JSR) 310, где
java.time
был впервые описан. - Проект ThreeTen Backport, то портировать из
java.time
на Java 6 и 7 (ThreeTen для JSR-310). - ThreeTenABP, версия ThreeTen Backport для Android
- Вопрос: как использовать ThreeTenABP в Android Project, с очень подробным объяснением.
- Статья в Википедии: ISO 8601