Наиболее эффективный способ преобразования строки даты в другую строку даты без использования SimpleDateFormat - PullRequest
0 голосов
/ 16 января 2020

Я хочу преобразовать одну строку даты в другую строку даты.

Например, я получаю дату ввода как "31-10-2018" и хочу преобразовать ее в "2018-10-31".

I уже есть информация относительно шаблона ввода , в котором я получаю дату, т.е. "dd-MM-гггг".

Также шаблон вывода, в котором мне нужна строка даты вывода, т. е. "гггг-мм-дд" .

Но условие в том, что я не хочу использовать SimpleDateFormat, а также не хочу использовать parse() или метод Format SimpleDateFormat.

Как указывалось ранее, я получаю ввод в виде строки, а также мне нужен вывод только в виде строки.

Какой может быть самый эффективный способ достижения этого?

Я хочу добавить несколько моментов по этому вопросу: -

  1. Я знаю, что SimpleDateFormat java достаточно с точки зрения производительности, но я не хочу его использовать поскольку требует создания дополнительных объектов, которые мне не нужны, поскольку у меня есть дата ввода в виде строки, которую я хочу преобразовать в другую строку.

  2. Мои форматы ввода и вывода может быть другим, но я получаю их в качестве входных данных для моего метода. говорят: -

public String getOutputString(String inputString, String inputPattern, String outputPattern) {
     // logic to get the output string 
}

Ответы [ 3 ]

4 голосов
/ 16 января 2020

Поиск дат без правильной библиотеки даты / времени - это глупое поручение.

С учетом сказанного вы можете превратить строку 31-10-2018 в 2018-10-31 следующим образом:

String s = "31-10-2018";
String t = new StringBuilder(10).append(s, 6, 10).append('-')
                                .append(s, 3, 5).append('-')
                                .append(s, 0, 2).toString();

Я бы просто не советовал.

4 голосов
/ 16 января 2020

РЕДАКТИРОВАТЬ: ОП изменил свой вопрос, следующий ответ больше не действителен Работает только для изменения с "дд-мм-гггг" на "гггг-мм-дд"

Разделить на -, перевернуть список и снова присоединиться с помощью -

List<String> tokens = Arrays.asList("31-10-2018".split("-"));
Collections.reverse(tokens);
String reversedDate = String.join("-", tokens);
4 голосов
/ 16 января 2020

Самый простой (и рекомендуемый в настоящее время) способ: java.time

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

public static void main(String[] args) {
    LocalDate localDate = LocalDate.parse("31-10-2018",
                                            DateTimeFormatter.ofPattern("dd-MM-yyyy"));
    System.out.println(localDate.format(DateTimeFormatter.ISO_LOCAL_DATE));
}

Вывод: 2018-10-31

Таким образом, вам не понадобится SimpleDateFormat или какой-либо класс из java.util!

РЕДАКТИРОВАТЬ
Чтобы подобрать неосуществленный метод, который вы впоследствии добавили к своему вопросу, это будет его реализация с использованием способа, показанного выше:

public String getOutputString(String inputString, String inputPattern, String outputPattern) {
     return LocalDate.parse(inputString, DateTimeFormatter.ofPattern(inputPattern))
             .format(DateTimeFormatter.ofPattern(outputPattern));
}
...