我已经编写了这段代码,它将与定义的日期格式匹配的所有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
}
}
请让我知道是否可以进一步优化/减少代码行。
答案 0 :(得分:0)
只要可行,它可能更适合代码审查。
无论如何,至少有2个观察结果:
您的Option.isEmpty
检查似乎很可疑,因为如果strDate
为空,它将返回false。我个人发现Option(strDate).getOrElse("").isEmpty
有点冗长,因此倾向于使用Apache Commons项目中的StringUtils.isBlank
。
DateTimeFormatter
应该是线程安全的,因此与Java8之前的日期格式化程序相比,它可能会引起一些问题,因此可以在函数外部创建。