Scala如何通过模式获取LocalDate

xiaohuochai 阅读:16 2025-01-19 22:14:33 评论:0

我尝试获取 LocaDate按格式,所以我采用了这个函数来接收日期并搜索要解析的格式:

def getLocalDate(date: String): LocalDate = { 
 
    val pattern1 = DateTimeFormatter.ofPattern("dd MMM, yyyy") 
    val pattern2 = DateTimeFormatter.ofPattern("dd MMM yyyy") 
    val pattern3 = DateTimeFormatter.ofPattern("yyyy-MMM-dd") 
    val pattern4 = DateTimeFormatter.ofPattern("dd/MM/YYYY") 
    val pattern5 = DateTimeFormatter.ISO_LOCAL_DATE 
 
    val result = Try { 
      LocalDate.parse(date, pattern1) 
    } recover { 
      case _ => LocalDate.parse(date, pattern2) 
    } recover { 
      case _ => LocalDate.parse(date, pattern3) 
    } recover { 
      case _ => LocalDate.parse(date, pattern4) 
    } recover { 
      case _ => LocalDate.parse(date, pattern5) 
    } 
 
    result.get 
  } 

用法:
var s1 = "01/08/2010" 
getLocalDate(s1) 

但出现错误:
java.time.format.DateTimeParseException: Text '01/08/2010' could not be parsed at index 0 

而且我不知道为什么以及出了什么问题。

请您参考如下方法:

import java.time.LocalDate 
import java.time.format.DateTimeFormatter 
 
import scala.util.Try 
 
def getLocalDate(date: String): java.time.LocalDate = { 
  val pattern1 = DateTimeFormatter.ofPattern("dd MMM, yyyy") 
  val pattern2 = DateTimeFormatter.ofPattern("dd MMM yyyy") 
  val pattern3 = DateTimeFormatter.ofPattern("yyyy-MMM-dd") 
  val pattern4 = DateTimeFormatter.ofPattern("dd/MM/yyyy") 
  val pattern5 = DateTimeFormatter.ISO_LOCAL_DATE 
 
  val result = Try { 
    LocalDate.parse(date, pattern1) 
  } recover { 
    case _ => LocalDate.parse(date, pattern2) 
  } recover { 
    case _ => LocalDate.parse(date, pattern3) 
  } recover { 
    case _ => LocalDate.parse(date, pattern4) 
  } recover { 
    case _ => LocalDate.parse(date, pattern5) 
  } 
 
  result.get 
} 
var s1 = "01/08/2010" 
getLocalDate(s1) 

这在 REPL(Scala 2.11.8,Java 1.8)中运行良好。

您的错误是在最后一个模式中包含“YYYY”而不是“yyyy”。
另外,看看包 nscala-time。也许它会为您的应用程序提供更好的绑定(bind)。


标签:Scala
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号