【发布时间】:2022-01-27 09:09:47
【问题描述】:
我正在编写一个每月自动执行一次的代码,它将计算机中的日期作为执行while循环的开始和结束日期。
val today = new DateTime().withZone(DateTimeZone.forID("Asia/Kolkata"))
var start = today.toString(DateTimeFormat.forPattern("yyyy-MM-dd"))
val end = today.toString(DateTimeFormat.forPattern("yyyy-MM-dd"))
while(start<=end){
Data(start,end)
}
def Data (start: DateTime, end: DateTime) {
val start_temp = start
val end_temp = end
var start_temp_1 = start_temp.minusMonths(1).withDayOfMonth(1);
var start_date_monthly = start_temp_1.toString(DateTimeFormat.forPattern("yyyy-MM-dd"))
println("Last Month Start Date: " + start_date_monthly)
var end_temp_1 = end_temp.minusMonths(0).withDayOfMonth(1);
var end_temp_2 = end_temp_1.minusDays(1)
var end_date_monthly = end_temp_2.toString(DateTimeFormat.forPattern("yyyy-MM-dd"))
println("Last Month End Date: " + end_date_monthly)
}
变量today中的日期需要转换为的第一个和最后一个日期
- 上个月来自
today - 当前和上一季度来自
today
我能够完成Data 函数中显示的第一个。
假设今天得到以下日期 - 2022-01-27T14:25:26.374+05:30
上述函数返回
Last Month Start Date: 2021-12-01
Last Month End Date: 2021-12-31
我怎样才能为第二个 - 当前和上一季度的第一个和最后一个日期实现这一目标?
Ex - 今天得到以下日期 - 2022-01-27T14:25:26.374+05:30
我需要返回上一季度的2021-10-01 和2021-12-31
以及当前季度的2022-01-01 和2022-03-31。
某些解决方案建议使用 Spark SQL 和 Dataframes,但这不适用于这种情况。
有没有一种直接的方式来做到这一点,就像在月份案例中所做的那样?还是 udf 是这里唯一的选择?
【问题讨论】:
-
这是否适用于您在数据框中记录的每个日期行
-
不,没有数据框。基本上,月份和季度的开始日期和结束日期将用作将执行的排序查询中的过滤器。由于目标是自动化,因此需要使用某种函数转换日期。