斯卡拉 :从大纪元开始的星期几



我正在尝试从纪元时间获取星期几。

我能够使用时间戳获取日期,但无法使用纪元时间而不是时间戳获得相同的日期。

以下是我尝试过的事情:

import java.time.LocalDate
import java.time.format.DateTimeFormatter
val df = DateTimeFormatter.ofPattern("dd/MM/yyyy")
val dayOfWeek = LocalDate.parse("21/05/2017",df).getDayOfWeek
dayOfWeek: java.time.DayOfWeek = SUNDAY

我正在寻找如下所示的东西,我可以将工作日作为 INT.例如星期一作为 1 等,但使用纪元时间而不是时间戳。样本纪元时间:1576683390

import spark.sqlContext.implicits._
val df = Seq(("2019-07-01 12:01:19.000"),
("2019-06-24 12:01:19.000"),
("2019-11-16 16:44:55.406"),
("2019-11-16 16:50:59.406")).toDF("input_timestamp")
df.withColumn("input_timestamp",
to_timestamp(col("input_timestamp"))).withColumn("week_day_number", date_format(col("input_timestamp"), "u")).withColumn("week_day_abb", date_format(col("input_timestamp"), "E")).show(false)
+-----------------------+---------------+------------+
|input_timestamp        |week_day_number|week_day_abb|
+-----------------------+---------------+------------+
|2019-07-01 12:01:19    |1              |Mon         |
|2019-06-24 12:01:19    |1              |Mon         |
|2019-11-16 16:44:55.406|6              |Sat         |
|2019-11-16 16:50:59.406|6              |Sat         |
+-----------------------+---------------+------------+

提前致谢!!

Sekar,如果我正确理解了您的问题,您可以将您的纪元转换为时间戳:

import spark.implicits._
import org.apache.spark.sql.functions._
val df = Seq(1576683390).toDF("input_timestamp")
df.withColumn("input_timestamp", $"input_timestamp".cast(TimestampType))
.withColumn("week_day_number", date_format(col("input_timestamp"), "u"))
.withColumn("week_day_abb", date_format(col("input_timestamp"), "E"))
.show(false)
+---------------------+---------------+------------+
|input_timestamp      |week_day_number|week_day_abb|
+---------------------+---------------+------------+
|2019-12-18 16:36:30.0|3              |Wed         |
+---------------------+---------------+------------+

编辑

使用简单的序列和本地日期时间:

import java.time.{Instant, LocalDateTime, ZoneOffset}
val seq = Seq(1576683390)
seq.map{epoch =>
val dayOfWeek = LocalDateTime.ofInstant(Instant.ofEpochSecond(epoch), ZoneOffset.UTC).getDayOfWeek
(dayOfWeek.getValue, dayOfWeek.toString)
}.foreach{println}

输出 :(3,WEDNESDAY)

最新更新