我有一个非常简单的字符串
YYYYMMDDHHMMSS
基本上是一个完整的日期/时间字符串。举一个例子是
20170224134523
以上暗示
year: 2017
month: 02
day:24
hour:13
min:45
sec:23
我想拆分它,以便我可以在变量(年,月,日,小时,分钟,秒)中使用它。这是我想要的Scala。我在想我应该使用6元组,而在右侧我会使用正则表达式或者最有效的方法。如果我想以简洁的方式做到这一点就是我想要的。正则表达式有点不好。 有人可以帮忙吗?
我可能希望将6元组中的每个变量作为选项类型,否则这也会进行我的理智检查?假设任何变量以None
形式出现,我想抛出异常
答案 0 :(得分:1)
java.text.SimpleDateFormat
可以很好地处理这种日期。
scala> val sdf = new SimpleDateFormat("yyyyMMddkkmmss")
sdf: java.text.SimpleDateFormat = java.text.SimpleDateFormat@8e10adc0
scala> val date = sdf.parse("20170224134523")
date: java.util.Date = Fri Feb 24 13:45:23 PST 2017
您可以通过API显示日期的成功解析来获取日期,日期,小时等。
scala> res0.get
getClass getDate getDay getHours getMinutes getMonth getSeconds getTime getTimezoneOffset getYear
此外,我建议将parse
调用包装在Try
中以处理成功和不成功的解析。
scala> val date = Try(sdf.parse("20170224134523"))
date: scala.util.Try[java.util.Date] = Success(Fri Feb 24 13:45:23 PST 2017)
scala> val date = Try(sdf.parse("asdf"))
date: scala.util.Try[java.util.Date] = Failure(java.text.ParseException: Unparseable date: "asdf")
使用较新的LocalDateTime
代替Date
及其弃用的方法也是如此。
LocalDateTime.parse("20170224134523", DateTimeFormatter.ofPattern("yMMddkkmmss"))
java.time.LocalDateTime = 2017-02-24T13:45:23
答案 1 :(得分:1)
因为它是一个日期字符串,所以使用专用的日期解析库并解析为日期时间类型可能是有意义的。幸运的是,java提供了一个非常好的java.time
包。
val dateTime = LocalDateTime.parse("20170224134523", DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))
将生成LocalDateTime
个对象(没有附加时区的日期和时间)。如果您需要更复杂的字符串解析,可以使用DateTimeFormatterBuilder
完全根据需要自定义日期格式。
答案 2 :(得分:0)
使用这种可预测的格式,您可以使用子字符串函数(from,to)按位置抓取它到日期类中。
以组的形式获取部分的正则表达式模式是:
(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})