在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 查询中将日期字符串转换为时间戳?