在scala中将时间字符串转换为时间戳/日期时间

Posted

技术标签:

【中文标题】在scala中将时间字符串转换为时间戳/日期时间【英文标题】:Convert time string into timestamp/date time in scala 【发布时间】:2020-09-25 08:03:56 【问题描述】:

我正在将时间数据作为格式 (HHMMSSSHS) 的 csv 文件接收到我的源中。我不确定格式中的 HS 代表什么。示例数据将类似于 15110708。

我正在使用接收的列和数据在 databricks 表中创建表。我想在 scala 中处理时将此字段转换为时间。 我正在使用 UDF 对旅途中的任何数据进行格式化。但是为此,我在编写一个只解析时间的 UDF 时完全被卡住了。

最终输出应为 15:11:07:08 或任何适合此字符串的时间格式。

我尝试使用 java.text.SimpleDateFormat 并遇到无法解析的字符串问题。

有什么方法可以将上面给出的字符串转换为时间格式?

我将此值作为列存储在 databricks 笔记本表中。除了字符串还有其他格式可以只保存时间值吗?

【问题讨论】:

你能写一些代码吗? 我建议你不要使用SimpleDateFormat。这个类是出了名的麻烦和过时。而是使用DateTimeFormatter 和java.time, the modern Java date and time API 中的其他类。 我想 HS 是百分之几秒。 BTW SimpleDateFormat 不支持这些。 java.time 可以。 【参考方案1】:

你试过了吗?:

import java.time.LocalTime

val dtf : DateTimeFormatter = DateTimeFormatter.ofPattern("HHmmssSS")
  
val localTime = udf  str : String =>
  LocalTime.parse(str, dtf).toString

给出:

+---------+------------+
|Timestamp|converted   |
+---------+------------+
|15110708 |15:11:07.080|
|15110708 |15:11:07.080|
+---------+------------+

【讨论】:

我尝试了同样的方法,但问题是我在数据块中创建表,如果这次的数据类型是字符串,那么它很好,但是如果我想使用数据类型(日期/时间戳)怎么能我用它。 除了string(date/timestamp)之外还有什么数据类型只能显示时间。 我尝试使用日期类型,它给出 null 作为输出我尝试使用时间戳,它在输出中给出当前日期以及这个时间值 没有SparkSQL类型只处理times

以上是关于在scala中将时间字符串转换为时间戳/日期时间的主要内容,如果未能解决你的问题,请参考以下文章

Scala - 如何在 Spark SQL 查询中将日期字符串转换为时间戳?

在 Impala 中将连接的字符串转换为时间戳

php怎么将指定日期转换为时间戳

在 PostgreSQL 中将 Julian 日期转换为时间戳

在 Spark 中将字符串字段转换为时间戳的更好方法

将日期和时间转换为时间戳 [重复]