我有一个给定的日期:
01/10/2017(mm/dd/yyyy)
Calendar c = c.getInstance();
c.setTime(date);
现在指向本月的最后一天,我使用以下代码:
c.set(Calendar.Date, c.getActualMaximum(Calendar.Date));
预期产出:2017年1月31日
原始输出:02/01/2017
我没有得到预期的输出。它在下个月的第一天归还我。
有人可以帮助我吗?
答案 0 :(得分:9)
最好在这里使用Java 8的新日期时间功能:
LocalDate date = LocalDate.of(2000, Month.OCTOBER, 15);
LocalDate lastOfMonth = date.with(TemporalAdjusters.lastDayOfMonth());
System.out.printf("last day of Month: %s%n", lastOfMonth );
是的,理论上你也可以使用Calendar对象并自己进行各种低级操作。但机会是:你会犯错误......好吧,除非你看here并遵循那里的建议。
但正如Basil正确指出的那样:310项目非常接近java.time(因为后者的设计与前者相匹配); 310可以“移植”back到Java7。因此,如果您需要处理日期的地方不止一个,我会深入研究:使用“理智的”日期/时间库让您的生活更轻松。
答案 1 :(得分:1)
我怀疑mm / dd / yyyy。试试这个
Date d = new SimpleDateFormat("MM/dd/yyyy").parse("01/10/2017");
Calendar c = Calendar.getInstance();
c.setTime(d);
c.set(Calendar.DATE, c.getActualMaximum(Calendar.DATE));
System.out.println(c.getTime());
它给出了预期日期:
2017年1月31日星期二00:00:00