spark sql函数用于am中的时间格式,而不是pm中的时间格式

bqucvtff  于 2021-07-09  发布在  Spark
关注(0)|答案(1)|浏览(248)

我正在将上午/下午的日期时间转换为24小时。am的转换工作正常,但pm的转换失败并返回null。请在样品下面找到

val seq = Seq((1,"abc","123","15/3/2021 02:00:00 AM"),(2,"pqr","456","15/3/2021 04:00:00 PM"),(1,"xyz","789","15/3/2021 09:00:00 AM"))

val df = seq.toDF("id","name","addr","time")

val time = df.withColumn("time2",from_unixtime(unix_timestamp($"time","dd/MM/yyyy HH:mm:ss a"),"d MMMMM yyyy HH:mm:ss"))

+---+----+----+---------------------+----------------------+
|id |name|addr|time                 |time2                 |
+---+----+----+---------------------+----------------------+
|1  |abc |123 |15/3/2021 02:00:00 AM|15 March 2021 02:00:00|
|2  |pqr |456 |15/3/2021 04:00:00 PM|null                  |
|1  |xyz |789 |15/3/2021 09:00:00 AM|15 March 2021 09:00:00|
+---+----+----+---------------------+----------------------+

有人能推荐一下吗?

eqfvzcg8

eqfvzcg81#

使用小写 h 为了 clock-hour-of-am-pm (1-12) (见文件)。另外,使用1 M 因为给定的格式只有一个月的数字;对于结果中月份的长格式,使用4 M 而不是5。

val time = df.withColumn(
    "time2",
    from_unixtime(unix_timestamp($"time","dd/M/yyyy hh:mm:ss a"),"d MMMM yyyy HH:mm:ss")
)

time.show(false)
+---+----+----+---------------------+----------------------+
|id |name|addr|time                 |time2                 |
+---+----+----+---------------------+----------------------+
|1  |abc |123 |15/3/2021 02:00:00 AM|15 March 2021 02:00:00|
|2  |pqr |456 |15/3/2021 04:00:00 PM|15 March 2021 16:00:00|
|1  |xyz |789 |15/3/2021 09:00:00 AM|15 March 2021 09:00:00|
+---+----+----+---------------------+----------------------+

相关问题