Преобразование даты-строки в другой формат
У меня есть строка, содержащая дату в формате 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.
Кто-нибудь знает альтернативный способ?
Ответы
Ответ 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