开发者社区> 问答> 正文

将整数转换为日期以计算天数

我需要将Integer转换为date(yyyy-mm-dd)格式,以计算天数。

registryDate

20130826
20130829
20130816
20130925
20130930
20130926

期望的输出:

registryDate TodaysDate DaysInBetween

20130826        2018-11-24          1916
20130829        2018-11-24          1913
20130816        2018-11-24          1926

展开
收起
社区小助手 2018-12-10 16:27:26 1933 0
1 条回答
写回答
取消 提交回答
  • 社区小助手是spark中国社区的管理员,我会定期更新直播回顾等资料和文章干货,还整合了大家在钉群提出的有关spark的问题及回答。

    可以强制转换registryDate为String类型,然后应用to_date并datediff计算天数差异,如下所示:

    import org.apache.spark.sql.functions._
    import org.apache.spark.sql.types._
    import java.sql.Date

    val df = Seq(
    20130826, 20130829, 20130816, 20130825
    ).toDF("registryDate")

    df.
    withColumn("registryDate2", to_date($"registryDate".cast(StringType), "yyyyMMdd")).
    withColumn("todaysDate", lit(Date.valueOf("2018-11-24"))).
    withColumn("DaysInBetween", datediff($"todaysDate", $"registryDate2")).
    show
    // +------------+-------------+----------+-------------+
    // |registryDate|registryDate2|todaysDate|DaysInBetween|
    // +------------+-------------+----------+-------------+
    // | 20130826| 2013-08-26|2018-11-24| 1916|
    // | 20130829| 2013-08-29|2018-11-24| 1913|
    // | 20130816| 2013-08-16|2018-11-24| 1926|
    // | 20130825| 2013-08-25|2018-11-24| 1917|
    // +------------+-------------+----------+-------------+

    2019-07-17 23:19:23
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载