日期格式转换-请求优化

时间:2018-06-26 06:30:28

标签: scala

我已经编写了这段代码,它将与定义的日期格式匹配的所有date as string转换为格式yyyy-MM-dd。但是我在想这段代码是否可以进一步优化。

import java.time.LocalDate
import java.time.format.{DateTimeFormatter, DateTimeFormatterBuilder}
 def convertDate(strDate: String): String = {
    if (Option(strDate).isEmpty) ""
    else{
      val f = new DateTimeFormatterBuilder()
        .appendOptional(DateTimeFormatter.ofPattern("yyyy MMMM dd"))
        .appendOptional(DateTimeFormatter.ofPattern("yyyy-MM-dd"))
        .appendOptional(DateTimeFormatter.ofPattern("yyyyMMdd"))
        .appendOptional(DateTimeFormatter.ofPattern("yyyy.MM.dd"))
        .appendOptional(DateTimeFormatter.ofPattern("MMddyyyy"))
        .appendOptional(DateTimeFormatter.ofPattern("yyyy/MM/dd"))
        .appendOptional(DateTimeFormatter.ofPattern("dd/MM/yyyy"))
        .appendOptional(DateTimeFormatter.ofPattern("dd-MM-yyyy"))
        .appendOptional(DateTimeFormatter.ofPattern("yyyy MMM dd"))
        .toFormatter

      val parsedDate = LocalDate.parse(isNull(strDate), f)
      val f2 = DateTimeFormatter.ofPattern("yyyy-MM-dd")
      val newDate = parsedDate.format(f2)
      newDate
    }
  }

请让我知道是否可以进一步优化/减少代码行。

1 个答案:

答案 0 :(得分:0)

只要可行,它可能更适合代码审查。

无论如何,至少有2个观察结果:

  • 您的Option.isEmpty检查似乎很可疑,因为如果strDate为空,它将返回false。我个人发现Option(strDate).getOrElse("").isEmpty有点冗长,因此倾向于使用Apache Commons项目中的StringUtils.isBlank

  • DateTimeFormatter应该是线程安全的,因此与Java8之前的日期格式化程序相比,它可能会引起一些问题,因此可以在函数外部创建。