Java 根据给定的频率将日期分成相等的间隔
我试着把一系列的日期分成相等的间隔。这是我正在使用的代码。(日期为YYYY-MM-dd格式) 在我的例子中,我希望以相等的间隔(每月以开始日期为一天)生成日期。在上面的例子中,我应该得到4个相等间隔的结果日期(正如我在几个月内给出的频率) 请让我知道如何才能做到这一点 下面是一个简单的例子Java 根据给定的频率将日期分成相等的间隔,java,apex,Java,Apex,我试着把一系列的日期分成相等的间隔。这是我正在使用的代码。(日期为YYYY-MM-dd格式) 在我的例子中,我希望以相等的间隔(每月以开始日期为一天)生成日期。在上面的例子中,我应该得到4个相等间隔的结果日期(正如我在几个月内给出的频率) 请让我知道如何才能做到这一点 下面是一个简单的例子 startdate = '2020-01-01' endDate = '2020-12-01' frequency = 4 输出应该是 2020-01-01 2020-03-01 2020-06-01 20
startdate = '2020-01-01'
endDate = '2020-12-01'
frequency = 4
输出应该是
2020-01-01
2020-03-01
2020-06-01
2020-09-01
示例代码
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class SOTest {
static DateFormat dateFormat = new SimpleDateFormat("yyy-MM-dd");
public static void main(String[] args) {
try {
String startDateString = "2020-01-01";
String endDateString = "2020-12-01";
int frequency = 4;
Date startDate = (Date)dateFormat.parse(startDateString);
Date endDate = (Date)dateFormat.parse(endDateString);
Long intervalSize = (endDate.getTime()-startDate.getTime())/frequency;
for(int i=0; i<= frequency && intervalSize > 0; i++) {
Date date = new Date(startDate.getTime()+intervalSize*i);
System.out.println("Date :: "+dateFormat.format(date));
}
} catch (ParseException e) {
e.printStackTrace();
}
}
}
输入::开始日期='2020-02-27',结束日期='2022-02-26',间隔=4
Date :: 2020-02-27
Date :: 2020-08-27
Date :: 2021-02-26
Date :: 2021-08-27
Date :: 2022-02-26
我会这样做的。我会给我们看这节课的日历
public class FrequencyTransform {
public static void main (String[] args) {
System.out.println("Split a date into equal intervals based on a given frequency");
Integer frequency= 4;
try {
Date startDate = new SimpleDateFormat("yyyy-mm-dd").parse("2020-02-27");
Date endDate = new SimpleDateFormat("yyyy-mm-dd").parse("2021-02-26");
Calendar startCalendar = Calendar.getInstance();
startCalendar.clear();
startCalendar.setTime(startDate);
Calendar endCalendar = Calendar.getInstance();
endCalendar.clear();
endCalendar.setTime(endDate);
// id you want the interval to be months
int monthsElapsed = elapsed(startCalendar, endCalendar, Calendar.MONTH);
System.out.println("Number of months between dates:" + monthsElapsed);
int interval = monthsElapsed % frequency;
System.out.println("For the frequency 4 the interval is: " + interval);
while (!startCalendar.after(endCalendar)){
startCalendar.add(Calendar.MONTH,interval);
Date auxDate= startCalendar.getTime();
System.out.println(auxDate);
}
}
catch (ParseException ex) {
ex.printStackTrace();
}
}
private static int elapsed(Calendar before, Calendar after, int field) {
Calendar clone = (Calendar) before.clone(); // Otherwise changes are been reflected.
int elapsed = -1;
while (!clone.after(after)) {
clone.add(field, 1);
elapsed++;
}
return elapsed;
}
}
这只是一个简单的例子。你可以从这里拿走。问题是日历允许您使用不同的时间单位。您可以使用Calendar.DATE代替Calendar.MONTH表示天数,Calendar.YEAR表示年份。我不太确定你想怎么分手 你为什么给它贴上JS的标签?我不太清楚你想要实现什么。你想每季度换一次吗。如果startDate=2018-04-06,endDate=2020-10-06,会发生什么?听起来并不复杂。首先计算开始日期和结束日期之间的月数,然后除以频率,然后将结果频率时间添加到开始日期。@Magdalenafirax,我们有开始日期和结束日期。和另一个数字名称频率。我基本上希望根据频率(以月为单位)提取开始日期和结束日期(包括开始日期)之间的日期并打印它们。根据您的示例,我需要将开始日期和结束日期之间的日期划分为4个相等的间隔,并打印日期。@user3872094我已经发布了一个可能的答案,请告诉我是否有效
Date :: 2020-01-01
Date :: 2020-03-24
Date :: 2020-06-16
Date :: 2020-09-08
Date :: 2020-12-01
Date :: 2020-02-27
Date :: 2020-08-27
Date :: 2021-02-26
Date :: 2021-08-27
Date :: 2022-02-26
public class FrequencyTransform {
public static void main (String[] args) {
System.out.println("Split a date into equal intervals based on a given frequency");
Integer frequency= 4;
try {
Date startDate = new SimpleDateFormat("yyyy-mm-dd").parse("2020-02-27");
Date endDate = new SimpleDateFormat("yyyy-mm-dd").parse("2021-02-26");
Calendar startCalendar = Calendar.getInstance();
startCalendar.clear();
startCalendar.setTime(startDate);
Calendar endCalendar = Calendar.getInstance();
endCalendar.clear();
endCalendar.setTime(endDate);
// id you want the interval to be months
int monthsElapsed = elapsed(startCalendar, endCalendar, Calendar.MONTH);
System.out.println("Number of months between dates:" + monthsElapsed);
int interval = monthsElapsed % frequency;
System.out.println("For the frequency 4 the interval is: " + interval);
while (!startCalendar.after(endCalendar)){
startCalendar.add(Calendar.MONTH,interval);
Date auxDate= startCalendar.getTime();
System.out.println(auxDate);
}
}
catch (ParseException ex) {
ex.printStackTrace();
}
}
private static int elapsed(Calendar before, Calendar after, int field) {
Calendar clone = (Calendar) before.clone(); // Otherwise changes are been reflected.
int elapsed = -1;
while (!clone.after(after)) {
clone.add(field, 1);
elapsed++;
}
return elapsed;
}