我在Scala的格式'yyyy-MM-dd'中有两个日期,它们都是一个月的最后一天(2015-05-31),我想在那之间找到月份差异。我有以下代码,但找到月份差异并不简单。
val format = new java.text.SimpleDateFormat("yyyy-MM-dd")
val diff = format.parse(date1).getTime - format.parse(date2).getTime
val days = TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS)
有什么更好的建议吗?
答案 0 :(得分:3)
如果您使用的是Java 8或更高版本,则可以在java.time包中使用新的日期和时间API。
首先,您创建两个LocalDate
个对象:
import java.time._
val s1 = LocalDate.parse("2012-05-31")
val s2 = LocalDate.parse(otherDate)
然后你有两个选择。第一个选项,直接使用ChronoUnit
个对象:
import java.time.temporal._
ChronoUnit.MONTHS.between(s1, s2) // the answer you are looking for
或创建一个Period
对象,用于表示时间段。
val p = Period.between(s1, s2)
p.getMonths() // returns the number of months between the two dates
Period
类具有其他方法,例如getDays()
,使您可以获取有关两个日期之间的时间段的更多信息。
答案 1 :(得分:1)
答案 2 :(得分:1)
那里有一个简单的方法
import org.apache.spark.sql.functions
import spark.implicits._
val res=dataframe.withColumn("Month_Age",
functions.months_between(
col("endDate"),
col("startDate")
))
但是在此之前,如果日期字符串不是日期格式,则必须将其解析为日期格式
您可以通过以下方式检查架构
dataframe.printschema()
root |-- endDate: date (nullable = false)
|-- startDate_date: date (nullable = true)
|-- Month_Age: Long (nullable = true)
您可以使用
from_unixtime(col("Date")/1000).cast("date")
如果日期采用纪元格式。
如有任何疑问,请发表评论。