Разбор дат из одного формата в другой - PullRequest
0 голосов
/ 29 июня 2019

У меня есть начальная дата в виде строки, которую мне нужно преобразовать в дату в определенном формате.Я попытался определить формат даты в строке и проанализировать его, затем я отформатировал его в нужный формат.Проблема в том, что мне нужно свидание в качестве окончательного результата.Вот код, который я использовал:

  def parseDateToOriginal(date: String): String = {
    val initialDateFormat = new SimpleDateFormat("EEE MMM dd hh:mm:ss zzz yyyy")
    val finalDateFormat = new SimpleDateFormat("yyyy-mm-dd")

    val result = finalDateFormat.format(initialDateFormat.parse(date))
    result
  }

Поэтому мне нужен Date как тип возвращаемого значения для этого метода.Я попытался разобрать строку результата, чтобы получить правильную дату, но по какой-то причине результат по умолчанию возвращается к исходному формату даты.Как я могу исправить эту проблему?

Вот как я попытался разобрать ее снова:

val parsedDate = new SimpleDateFormat("yyyy-mm-dd").parse(parseDateToOriginal(date))

В результате получился шаблон "EEE MMM dd hh:mm:ss zzz yyyy"

Ответы [ 2 ]

4 голосов
/ 29 июня 2019

Во-первых, SimpleDate старый и устаревший. Рекомендуется использовать текущую библиотеку java.time.

Далее, если вам нужно вернуть Date, проанализируйте вход и верните Date. Вам нужно форматировать Date только при его представлении, то есть изменить его на String.

import java.time.LocalDate
import java.time.format.DateTimeFormatter

def parseToDate(date: String): LocalDate = 
  LocalDate.parse(date
                 ,DateTimeFormatter.ofPattern("EEE MMM dd hh:mm:ss zzz yyyy"))
2 голосов
/ 29 июня 2019

Попробуйте

import java.time.LocalDateTime
import java.time.format.DateTimeFormatter

def parseDateToOriginal(date: String): String = {
  LocalDateTime
    .parse(date, DateTimeFormatter.ofPattern("EEE MMM d HH:mm:ss zzz yyyy"))
    .format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))
}

который выводит

parseDateToOriginal("Thu Jun 18 20:56:02 EDT 2009") // res2: String = 2009-06-18

Обратите внимание, у вас есть ошибка в формате finalDateFormat

val finalDateFormat = new SimpleDateFormat("yyyy-mm-dd")

Вы используете строчные буквы mm в позициях месяца, но должны быть заглавными MM. Нижний регистр mm представляет минуты, поэтому он может ошибочно привести к res2: String = 2009-56-18 в качестве выходных данных.

...