scala循环将日期字符串添加到seq中



我正在尝试将字符串中的日期从数组添加到seq中,同时确定它是否是周末。

import java.text.SimpleDateFormat
import java.util.{Calendar, Date, GregorianCalendar}
import org.apache.spark.sql.SparkSession
val arrDateEsti=dtfBaseNonLong.select("AAA").distinct().collect.map(_(0).toString);

var dtfDateCate = Seq(
("0000", "0")
);

for (a<-0 to arrDateEsti.length-1){
val dayDate:Date = dateFormat.parse(arrDateEsti(a));
val cal=new GregorianCalendar
cal.setTime(dayDate);

if (cal.get(Calendar.DAY_OF_WEEK)==1 || cal.get(Calendar.DAY_OF_WEEK)==7){
dtfDateCate:+(arrDateEsti(a),"1")
}else{
dtfDateCate:+(arrDateEsti(a),"0")
}
};
scala> dtfDateCate
res20: Seq[(String, String)] = List((0000,0))

它返回相同的初始序列。但如果我运行一个元素,它就会起作用。出了什么问题?

scala>   val dayDate:Date = dateFormat.parse(arrDateEsti(0));
dayDate: java.util.Date = Thu Oct 15 00:00:00 CST 2020
scala>   cal.setTime(dayDate);
scala>   if (cal.get(Calendar.DAY_OF_WEEK)==1 || cal.get(Calendar.DAY_OF_WEEK)==7){
|     dtfDateCate:+(arrDateEsti(0),"1")
|   }else{
|     dtfDateCate:+(arrDateEsti(0),"0")
|   };
res14: Seq[(String, String)] = List((0000,0), (20201015,0))

我认为这正是你想要做的。

import java.time.LocalDate
import java.time.DayOfWeek.{SATURDAY, SUNDAY}
import java.time.format.DateTimeFormatter
//replace with dtfBaseNonLong.select(... code
val arrDateEsti = Seq("20201015", "20201017")  //place holder
val dtFormat = DateTimeFormatter.ofPattern("yyyyMMdd")
val dtfDateCate = ("0000", "0") +:
arrDateEsti.map { dt =>
val day = LocalDate.parse(dt,dtFormat).getDayOfWeek()
if (day == SATURDAY || day == SUNDAY) (dt, "1")
else                                  (dt, "0")
}
//dtfDateCate = Seq((0000,0), (20201015,0), (20201017,1))

是的,应该是seqDateCate=seqDateCate:+(arrDateEsti(a),"1")

最新更新