从Scala中的自定义日期开始返回x天

时间:2017-06-19 05:30:02

标签: scala apache-spark

我有 20170501 类型的日期键,其格式为 YYYYmmdd 。我们怎样才能在Scala中从这个日期算起x天?

这就是我在程序中所拥有的

val runDate = 20170501

现在我希望从这个日期起30天后再说一个日期。

2 个答案:

答案 0 :(得分:2)

使用Scala / JVM / Java 8 ...

scala> import java.time._
import java.time._

scala> import java.time.format._
import java.time.format._

scala> val formatter = DateTimeFormatter.ofPattern("yyyyMMdd")
formatter: java.time.format.DateTimeFormatter = Value(YearOfEra,4,19,EXCEEDS_PAD)Value(MonthOfYear,2)Value(DayOfMonth,2)

scala> val runDate = 20170501
runDate: Int = 20170501

scala> val runDay = LocalDate.parse(runDate.toString, formatter)
runDay: java.time.LocalDate = 2017-05-01

scala> val runDayMinus30 = runDay.minusDays(30)
runDayMinus30: java.time.LocalDate = 2017-04-01

答案 1 :(得分:0)

你也可以使用具有非常好功能的joda-time API,如

date.minusMonths
date.minusYear
date.minusDays
date.minusHours
date.minusMinutes

以下是使用JodaTIme API'

的简单示例
import org.joda.time.format.DateTimeFormat
val dtf = DateTimeFormat.forPattern("yyyyMMdd")
val dt= "20170531"

val date = dtf.parseDateTime(dt)
println(date.minusDays(30))

输出:

2017-05-01T00:00:00.000+05:45

为此,您需要使用udf并使用您的输入格式创建DateTime对象" YYYYmmdd"并进行操作。

希望这有帮助!