Преобразование строки даты в другой формат - PullRequest
24 голосов
/ 10 июля 2011

У меня есть строка, содержащая дату в формате 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.

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

Ответы [ 5 ]

44 голосов
/ 10 июля 2011

Использование 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));
4 голосов
/ 10 июля 2011

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

3 голосов
/ 30 июня 2017

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

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 года, а также был перенесен на Java 6 и 7 в проекте ThreeTen-Backport. Для Android см. Проект ThreeTenABP. Поэтому в наши дни, честно говоря, я не вижу оправдания для использования SimpleDateFormat и Date. Новые классы намного удобнее для программистов и с ними приятно работать.

2 голосов
/ 10 июля 2011

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

String dateInNewFormat = dateInOldFormat.substring(8) 
                         + dateInOldFormat.substring(4, 8) 
                         + dateInOldFormat.substring(0, 4)
1 голос
/ 22 июня 2017
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

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