У меня есть список строк, как следует из названия папки.

List(20170625, 20170625, 20170625, 20170625, 20170625, 20170625, 20170625, 20170625)

Я хочу преобразовать весь этот список элементов в локальный формат даты. Я написал код на языке Scala. Может ли кто-нибудь мне помочь?

0
Dinusha Dilanka 4 Сен 2017 в 08:19

5 ответов

Лучший ответ

Вы можете попробовать следующий код:

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

val inputTimes = List(20170625, 20170625, 20170625, 20170625, 20170625, 20170625, 20170625, 20170625)
val dtf = DateTimeFormatter.ofPattern("yyyyMMdd")
val dates = inputTimes.map(date => LocalDate.parse(date.toString, dtf))
dates

Вы также можете указать новую локаль

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

val inputTimes = List(20170625, 20170625, 20170625, 20170625, 20170625, 20170625, 20170625, 20170625)
val dtf = DateTimeFormatter.ofPattern("yyyyMMdd")
val dtfWithLocale = dtf.withLocale(java.util.Locale.US)
val dates = inputTimes.map(date => LocalDate.parse(date.toString, dtfWithLocale))
dates

dates является результатом.

2
jiayp89 4 Сен 2017 в 06:18

Если вы пытаетесь преобразовать его в формат YYYY-MM-DD, вы можете сделать что-то вроде этого

scala> val list = List("20170625", "20170625", "20170625", "20170625", "20170625", "20170625", "20170625", "20170625")
list: List[String] = List(20170625, 20170625, 20170625, 20170625, 20170625, 20170625, 20170625, 20170625)

scala> import java.time.LocalDate
import java.time.LocalDate

scala> list.map(input => LocalDate.parse(s"${input.substring(0,4)}-${input.substring(4,6)}-${input.substring(6,8)}"))
res11: List[java.time.LocalDate] = List(2017-06-25, 2017-06-25, 2017-06-25, 2017-06-25, 2017-06-25, 2017-06-25, 2017-06-25, 2017-06-25)
1
rogue-one 4 Сен 2017 в 06:01

Сначала я написал функцию для преобразования строки в формат LocalDateTime следующим образом

import java.time.LocalDateTime
import java.time.format.DateTimeFormatter
private def stringToDateTime(datetime:String): LocalDateTime ={
        val pattern:String="yyyyMMdd"
        LocalDateTime.parse(datetime, DateTimeFormatter.ofPattern(pattern))}

Затем я сопоставляю значения со списком элементов следующим образом

def mapDateTime(list:List[String]):List[LocalDateTime] ={
list.map(datetime => stringToDateTime(datetime))}

Тогда я получаю следующий результат

List[java.time.LocalDateTime] = List(2017-06-25, 2017-06-25, 2017-06-25, 2017-06-25, 2017-06-25, 2017-06-25, 2017-06-25, 2017-06-25)
0
Dinusha Dilanka 5 Сен 2017 в 02:35

Раскол - грубая реализация. Однако должно работать

  def split(i: Int): LocalDate = {
    val date = i % 100
    val rem = i / 100
    val mon = rem % 100
    val r = rem / 100
    LocalDate.of(r, mon, date)
  }

  def main(args: Array[String]): Unit = {
    val l = List(20170625, 20170625, 20170625, 20170625, 20170625, 20170625, 20170625, 20170625)
    val x = l.map(split)
  }
0
Sajith Silva 4 Сен 2017 в 06:05

Чтобы преобразовать строки в java.util.Date, вы можете использовать:

val df = new SimpleDateFormat("yyyyMMdd")
list.map(df.parse(_))

Для использования LocalDate

list.map(LocalDate.parse(_, DateTimeFormatter.ofPattern("yyyyMMdd")))
0
Harald Gliebe 4 Сен 2017 в 06:07