从解析日期获取年,月和日

时间:2016-11-14 13:09:27

标签: scala

我有以下代码来验证给定日期格式的日期:

val df = new SimpleDateFormat("MM/dd/yyyy");
df.setLenient(false);

try {
   val date = df.parse("11/13/2014");
}
catch {
  case pe: ParseException => println("date error")
}

现在,我需要的是获得三个变量中的年,月和日。实现这一目标的最佳方法是什么?请注意,我需要一个基于性能的解决方案,因为我需要验证/转换数千个日期。

1 个答案:

答案 0 :(得分:7)

java.time

使用Java 8和新的日期/时间API。更好,更清洁,面向未来。

val dateFormat = "MM/dd/yyyy"
val dtf = java.time.format.DateTimeFormatter.ofPattern(dateFormat)
val dateString = "11/13/2014"
val d = java.time.LocalDate.parse(dateString, dtf)
val year = d.getYear
  

2014

val monthNumber = d.getMonthValue
  

11

您可以访问Month枚举对象。

val month = d.getMonth
  

Month.NOVEMBER

val dayOfMonth = d.getDayOfMonth
  

13

将输入解析为java.time.LocalDate后,您可以使用getYear获取年份等。

要验证,请捕获为无效输入生成的DateTimeParseException

如果您想跳过正确的日期验证(例如性能)并只提取Y,M,D - 您可以拆分字符串并获取整数,如下所示

val ymd = dateString.split("/").map(_.toInt)
ymd: Array[Int] = Array(11, 13, 2014)