【问题标题】:How to get last day of the month for the given date [duplicate]如何获取给定日期本月的最后一天[重复]
【发布时间】:2017-01-17 12:26:42
【问题描述】:

我有一个给定的日期:

01/10/2017(mm/dd/yyyy)

Calendar c = c.getInstance();

c.setTime(date);

现在指向本月的最后一天,我使用以下代码:

c.set(Calendar.Date, c.getActualMaximum(Calendar.Date));

预计产出:2017 年 1 月 31 日

原始输出:2017 年 2 月 1 日

我没有得到预期的输出。它在下个月的第一天返回我。

谁能帮帮我?

【问题讨论】:

  • 备案:在您的帖子中添加代码时,请考虑使用标记;不要把所有的东西都写成普通的文本!
  • 发帖前请先搜索 Stack Overflow。

标签: java date calendar


【解决方案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 EET

【讨论】:

    【解决方案2】:

    您最好在这里使用 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。因此,如果您需要处理多个日期的地方,我会仔细研究:使用“健全的”日期/时间库让您的生活更轻松。

    【讨论】:

    • 其实我是在Java 7环境下开发的。
    • 那我会说:被指出的 DUP 应该是回答你所有的问题。
    • 查看 ThreeTen-Backport 项目,了解 Java 6 和 Java 7 的大部分 java.time 功能的反向移植。在 ThreeTenABP 项目中进一步适应 Android
    • @BasilBourque 好主意;谢谢,将其包含在我的回答中并表示感谢;-)
    猜你喜欢
    • 1970-01-01
    • 2013-03-04
    • 1970-01-01
    • 2016-01-13
    • 2022-01-26
    • 1970-01-01
    • 2020-08-24
    • 1970-01-01
    • 2011-11-24
    相关资源
    最近更新 更多