Подтвердить что ты не робот

Преобразование даты-строки в другой формат

У меня есть строка, содержащая дату в формате YYYY-MM-DD.

Как вы предлагаете мне наилучшим образом преобразовать его в формат DD-MM-YYYY?

Вот как я наивно делал это:

import java.util.*;
public class test {
    public static void main(String[] args) {
         String date = (String) args[0]; 
         System.out.println(date); //outputs: YYYY-MM-DD
         System.out.println(doConvert(date)); //outputs: DD-MM-YYYY
    }

    public static String doConvert(String d) {
         String dateRev = "";
         String[] dateArr = d.split("-");
         for(int i=dateArr.length-1 ; i>=0  ; i--) {
             if(i!=dateArr.length-1)
                dateRev += "-";
             dateRev += dateArr[i];
         }
    return dateRev;
    }
}

Но есть ли другой, более элегантный и эффективный способ сделать это? То есть. используя некоторую встроенную функцию? Я не смог найти его, быстро просматривая API.

Кто-нибудь знает альтернативный способ?

4b9b3361

Ответ 1

Используйте java.util.DateFormat:

DateFormat fromFormat = new SimpleDateFormat("yyyy-MM-dd");
fromFormat.setLenient(false);
DateFormat toFormat = new SimpleDateFormat("dd-MM-yyyy");
toFormat.setLenient(false);
String dateStr = "2011-07-09";
Date date = fromFormat.parse(dateStr);
System.out.println(toFormat.format(date));

Ответ 2

Лучше всего использовать объект SimpleDateFormat (API) для преобразования объекта String в Date. Затем вы можете преобразовать через другой объект SimpleDateFormat в любое строковое представление, которое вы хотите предоставить вам огромную гибкость.

Ответ 3

Если вы не ищете преобразование String to Date и наоборот, и, следовательно, вам не нужно обрабатывать недопустимые даты или что-либо, манипуляция с строками является самым простым и эффективным способом. Но я гораздо менее удобочитаемый и поддерживаемый, чем использование DateFormat.

String dateInNewFormat = dateInOldFormat.substring(8) 
                         + dateInOldFormat.substring(4, 8) 
                         + dateInOldFormat.substring(0, 4)

Ответ 4

Это современный ответ.

private static DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-uuuu");

public static String doConvert(String d) {
    return LocalDate.parse(d).format(formatter);
}

С этим мы можем сделать, например:

    System.out.println(doConvert("2017-06-30"));

Отпечатает

30-06-2017

Я использую тот факт, что формат, который у вас есть, YYYY-MM-DD, соответствует стандарту ISO 8601, стандарту, который современные классы дат и времени Java "понимают" изначально, поэтому нам не нужен явный форматтер для синтаксического анализа, только один для форматирования.

Когда этот вопрос был задан в 2011 году, SimpleDateFormat был также ответом, который я бы дал. Новый API дат и времени вышел с Java 8 в начале 2014 года, а также был backported на Java 6 и 7 в проекте ThreeTen-Backport. Для Android см. Проект ThreeTenABP. Поэтому в наши дни честно, я не вижу оправдания для использования SimpleDateFormat и Date. Новые классы гораздо более дружелюбны к программистам и с ними приятно работать.

Ответ 5

import java.util.DateFormat;   

// Convert String Date To Another String Date
public String convertStringDateToAnotherStringDate(String stringdate, String stringdateformat, String returndateformat){        

        try {
            Date date = new SimpleDateFormat(stringdateformat).parse(stringdate);
            String returndate = new SimpleDateFormat(returndateformat).format(date);
            return returndate;
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return "";
        }

}

//-------
String resultDate = convertStringDateToAnotherStringDate("1997-01-20", "yyyy-MM-dd", "MM/dd/yyyy")
System.out.println(resultDate);

строка даты результата: 01/20/1997