Scala:按小时范围过滤字符串日期?

Scala:按小时范围过滤字符串日期?,scala,Scala,我正在使用Scala,并尝试在带有日期和时间值的字符串列上过滤数据集。我一直在看几篇文章,试图使用SimpleDateFormat技术,但都无济于事 我的样本数据是: +----------------------+ |my_date_str | +----------------------+ |12/11/2018 08:01:55 AM| |12/11/2018 08:33:22 PM| |12/13/2018 09:25:28 PM| |12/17/2018 07:2

我正在使用Scala,并尝试在带有日期和时间值的字符串列上过滤数据集。我一直在看几篇文章,试图使用
SimpleDateFormat
技术,但都无济于事

我的样本数据是:

+----------------------+
|my_date_str           |
+----------------------+
|12/11/2018 08:01:55 AM|
|12/11/2018 08:33:22 PM|
|12/13/2018 09:25:28 PM|
|12/17/2018 07:27:36 PM|
+----------------------+
我想把行保持在晚上7点到9点之间(日期不重要,只有时间)。我希望保留这四行中的两行:

12/17/2018 07:27:36 PM
12/11/2018 08:33:22 PM
我可以使用
substring
函数来解决这个问题,但我认为有一种更好的方法可以使用
to\u date
unix
函数(我尝试使用
unix\u timestamp()
转换为秒,然后以某种方式推断时间),隔离时间,并检查小时值

// Filter down to rows between 7 and 9 and PM
my_data.withColumn("hour_str", substring($"my_date_str", 12, 8))
    .filter( (substring($"my_date_str", -2, 2) === "PM") && ($"my_date_str" >= "07:00:00") && ($"my_date_str" <= "09:00:00") )
    .show(truncate=false)
//向下筛选到7到9点和下午1点之间的行
my_data.withColumn(“hour_str”,子字符串($“my_date_str”,12,8))
.filter((子字符串($“my_date_str”,-2,2)==“PM”)&($“my_date_str”>=“07:00:00”)&($“my_date_str”您需要的是“正常”时间戳,而不是unix时间戳

虽然我对确切的咒语有些生疏,但这样的方法应该行得通:

df
.withColumn(
  "hour", 
  hour(to_timestamp($"foo", "MM/dd/yyy hh:mm:ss a"))
).filter($"hour" between (19,20))

嗯,我也在尝试获得正确的模式。在转换中,AM行返回正确的小时,但PM行为空。这似乎工作正常:hour(to_timestamp($“foo”,“MM/dd/yyyy hh:MM:ss a”)@md2614很好。我将编辑答案