【问题标题】:Get year, month and day from parsed date从解析的日期获取年月日
【发布时间】:2016-11-14 13:09:27
【问题描述】:

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

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")
}

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

【问题讨论】:

  • Simple... 去阅读 Date API 的文档。试试看,如果仍有问题,请在此处询问。
  • 它说 getYear 已被弃用,这就是我问的原因
  • 无论如何我都会使用 joda-time 或 java.time。
  • 创建日历实例。使用日历的setTime 方法将其设置为您的日期。现在你有了你约会的日历。现在使用弃用消息中给出的提示,您将获得您的年份等。
  • @SarveshKumarSingh 你为什么不把它写成答案?

标签: scala


【解决方案1】:

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

11 月 11 日

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)

【讨论】:

  • 如果您只是拆分字符串,那么 解析 LocalDate 有什么意义?改用LocalDate 方法:d.getYeard.getMonthValue 等。
  • OP 提到了“验证”。将其解析为日期是对日期的最终验证,而不仅仅是斜杠分隔的整数(例如“65/82/1314”)。 OP 可以根据需要免费使用尽可能少的解决方案
  • 他说:“现在,我需要在三个变量中获取年月日”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-19
  • 1970-01-01
  • 2016-07-10
相关资源
最近更新 更多