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

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

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

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

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

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

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

【问题讨论】:

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

标签: scala datetime user-defined-functions datetime-format time-format


【解决方案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
猜你喜欢
  • 1970-01-01
  • 2019-07-30
  • 2012-08-15
  • 1970-01-01
  • 2016-12-18
  • 2011-05-05
  • 2016-11-30
  • 2017-10-11
  • 1970-01-01
相关资源
最近更新 更多