在Joda Time本身/或其他一些API中,我是否可以实现相同的机制或方法? 请提出建议?
输入日期:2018-04-30
像这样使用Joda Time的输出为:2018-05-30
预计日期:2018-05-31
再次编辑 想知道是否可以这样说并喜欢
如果输入日期是最后日期(将使用共享的算法),则 获取下个月的最后日期,然后
否则,如果输入日期为其他日期,则使用plusMonths方法
对吗?
String startDate = "2018-04-30";
DateTime startDateTime = new DateTime(startDate, DateTimeZone.UTC);
int repeatEvery = 1;
int numOfPayments = 2;
String endDate = startDateTime.plusMonths(repeatEvery * (numOfPayments-1)).toString();
System.out.println(endDate);
答案 0 :(得分:3)
使用Java Time API,使用TemporalAdjuster
获取一个月的最后一天非常简单,该API附带了一些已经定义的内容,例如TemporalAdjusters.lastDayOfMonth()
。
因此,这是一个有关如何获取下个月的最后一天(基于今天)的简单示例。
LocalDate date = LocalDate.now()
.plus(1, ChronoUnit.MONTHS)
.with(TemporalAdjusters.lastDayOfMonth()));
我认为这很冗长,可以理解。
将字符串解析为LocalDate
。只需将now()
替换为parse()
即可:
LocalDate.parse("2019-05-03", DateTimeFormatter.ISO_DATE);
使用:
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAdjusters;
这实际上已经an answer in the duplicate提出,只需要稍作努力就可以找到它。湖泊隐约可见!!
答案 1 :(得分:0)
您可以在日历上执行此操作
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String startDate = "2018-04-30";
int repeatEvery = 1;
int numOfPayments = 2;
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
cal.setTime(sdf.parse(startDate));
cal.add(Calendar.MONTH, repeatEvery * (numOfPayments - 1));
System.out.println("intRes: "+sdf.format(cal.getTime()));
cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
String endDate = sdf.format(cal.getTime());
System.out.println(endDate);
退出:
intRes:2018-05-30
2018-06-01
我不知道为什么这会给我2018-06-01吗?