Scala преобразование строки в дату - PullRequest
1 голос
/ 19 июня 2020

У меня есть строковый формат даты, но он взят из файла csv: 20200520T0200, при условии, что он имеет формат (yyyyMMdd / T / 24-часовой формат).

Мне удалось прочитать строк в файле csv и разделил его на буфер массива.

Мой вопрос: я не могу отформатировать строку в дату, так как мне нужно использовать дату для вычисления некоторых значений. Поскольку я буду использовать это средство форматирования для форматирования всех значений первого элемента моего буфера массива, который является временем со строками «20200406T0300, et c, et c, et c».

В настоящее время я пробовал использовать DateTimeFormatter,

файл csv импорт java .io.File

import scala.io.Source
import scala.collection.mutable.ArrayBuffer
import java.time._
import java.time.format.DateTimeFormatter

val dtf = DateTimeFormatter.ofPattern("yyyyMMddaH")
val date_int_format = DateTimeFormatter.ofPattern("yyyyMMdd")
val last_extract_value= "20200530T0200"
val string_to_date = dtf.parse(last_extract_value)


val rows = ArrayBuffer[Array[String]]()

val bufferedSource = Source.fromFile("D:/Scala/Testtt/src/main/scala/testData.csv")
for (line <- bufferedSource.getLines.drop(10)) {
  rows += line.split(",").map(_.trim)

}
for (row <- rows) {
  println(s"${row(0)}|${row(1)}")
}

1 Ответ

4 голосов
/ 19 июня 2020

Я не думаю, что это стандартный формат DateTime, кто-то что-то удалил или что-то добавил. Выглядит как ISO DATE, но ISO находится в формате yyyy-MM-ddTHH:mm ...

Edit: @ OleV.V. любезно разъяснил формат как основную c форму ISO 8601 формат

У вас есть несколько вариантов

  1. Либо избавьтесь от этого T и проанализируйте его с помощью SimpleDateTimeFormat

    val format = new SimpleDateFormat ("yyyyMMddHHmm") val f = format.parse ("20200520T0200" .replaceAll ("T", "")) // среда, 20 мая 2002 г. : 00: 00 GMT 2020

  2. Или определите настраиваемый модуль форматирования и проанализируйте его во все, что time object перемещает вашу лодку.

    val customFormatter = DateTimeFormatter.ofPattern ("ггггММдд'Т'ЧЧмм"); val q = LocalDateTime.parse ("20200520T0200", customFormatter)

...