Конвертация формата даты Android - PullRequest
10 голосов
/ 01 августа 2011

У меня есть строковая форма даты:

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?

Ответы [ 9 ]

13 голосов
/ 01 августа 2011

попробуйте

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;

10 голосов
/ 01 августа 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);
}
4 голосов
/ 01 августа 2011

Вы можете использовать android.text.format.DateFormat следующим образом:

DateFormat.getMediumDateFormat(context).format(date);
3 голосов
/ 01 августа 2011
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 с использованием замены и подстроки

1 голос
/ 22 августа 2015

Для получения AM или PM и 12-часового формата даты используйте hh:mm:ss a в качестве форматера строк, где hh для 12-часового формата и a для формата AM PM.

note ## HH isна 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);
0 голосов
/ 14 апреля 2019

Я хотел бы предоставить современный ответ.

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 используется версия ThreeTen для AndroidBackport.Это называется ThreeTenABP.И убедитесь, что вы импортируете классы даты и времени из org.threeten.bp с подпакетами.

Ссылки

0 голосов
/ 16 сентября 2014
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");
0 голосов
/ 08 мая 2014

Пример кода с использованием библиотеки 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 );
0 голосов
/ 01 августа 2011

То, что вы хотите сделать, - это создать формат для вашей даты, чтобы иметь возможность анализировать дату так, как вы хотите.

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

Ознакомьтесь с документацией, что именно нужно использовать для форматирования, а затем что использовать для анализа.Как только я понял это, стало намного легче.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...