我正在尝试在 Java 中创建一个函数,在给定开始和结束日期的情况下生成季度日期序列。
例如,在 R 中,我可以按如下方式执行此操作:
generateQuarterlySequence = function(startDate, endDate)
{
require(zoo)
# Generate date sequence
dateSequence = seq.Date(from = as.Date(startDate),
to = as.Date(endDate),
by = "quarter")
# Convert to quarters
dateSequence = as.yearqtr(dateSequence, format = "%Y-%m-%d")
# Get rid of extra white space
dateSequence = gsub(" ", "", dateSequence)
return(dateSequence)
}
generateQuarterlySequence(startDate = "2017-06-30", endDate = "2017-12-31")
[1] "2017Q2" "2017Q3" "2017Q4"
Run Code Online (Sandbox Code Playgroud)
有没有摇滚明星愿意展示这是如何在 Java 中完成的?你会让这个 Java 初学者非常开心!
干杯,乔
我知道在评论中我建议了ThreeTen-Extra。但是,这里有一个解决方案java.time,在 Java 8 及更高版本中使用 pure as built-in 并通过ThreeTen Backport在 Java 6 和 7 中可用。
public static List<String> generateQuarterlySequence(LocalDate startDate, LocalDate endDate) {
// first truncate startDate to first day of quarter
int startMonth = startDate.getMonthValue();
startMonth-= (startMonth - 1) % 3;
startDate = startDate.withMonth(startMonth).withDayOfMonth(1);
DateTimeFormatter quarterFormatter
= DateTimeFormatter.ofPattern("uuuuQQQ", Locale.ENGLISH);
List<String> quarterSequence = new ArrayList<>();
// iterate thorough quarters
LocalDate currentQuarterStart = startDate;
while (! currentQuarterStart.isAfter(endDate)) {
quarterSequence.add(currentQuarterStart.format(quarterFormatter));
currentQuarterStart = currentQuarterStart.plusMonths(3);
}
return quarterSequence;
}
Run Code Online (Sandbox Code Playgroud)
用您的示例参数尝试一下:
System.out.println(generateQuarterlySequence(LocalDate.of(2017, Month.JUNE, 30),
LocalDate.of(2017, Month.DECEMBER, 31)));
Run Code Online (Sandbox Code Playgroud)
印刷
[2017Q2, 2017Q3, 2017Q4]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2435 次 |
| 最近记录: |