【问题标题】:find first and last date of the last month [duplicate]查找上个月的第一个和最后一个日期[重复]
【发布时间】:2019-03-04 07:59:08
【问题描述】:

我有一个简单但棘手的代码来编写我以 UTC 时间给出今天的日期字符串的位置。

String s = Instant.now().toString().replaceAll("T.*", "");

我需要找到上个月的第一天和最后一天,并将它们存储在单独的字符串中。关于如何最好地实现它的任何建议?

【问题讨论】:

  • 开始时不要使用字符串,而是使用日期。
  • LocalDate.now()?
  • 请包含示例数据,并解释为什么不能按照建议使用 now() 以及预期的输出。
  • @JoakimDanielson 我使用import java.time.* 并且不想与许多库混淆。此外,我需要小心知道当前的UTC 日期并找到上个月的第一个+最后一个日期。好的,我只是发现它们确实在同一个库中java.time.LocalDate
  • 确实,重复...不知道为什么我在 Google 搜索中没有找到。

标签: java datetime utc


【解决方案1】:

您可以使用LocalDate获取

LocalDate startOfMonth = LocalDate.now().with(TemporalAdjusters.firstDayOfMonth());
LocalDate endOfMonth = LocalDate.now().with(TemporalAdjusters.lastDayOfMonth());

【讨论】:

    【解决方案2】:

    您可以使用TemporalAdjusters

    如果您不必以字符串开头,请不要。如果可能,请以LocalDate 开头。

    如果你必须以字符串开头,你可以通过parse将你的字符串s转换为LocalDate

    LocalDate ld = LocalDate.parse(s);
    

    现在我们可以像这样得到月份的开始和结束:

    LocalDate startOfMonth = ld.with(TemporalAdjusters.firstDayOfMonth());
    LocalDate endOfMonth = ld.with(TemporalAdjusters.lastDayOfMonth());
    

    我建议您在绝对必要之前不要将它们转换为字符串(例如将其显示给用户)。

    【讨论】:

      【解决方案3】:

      使用LocalDate 及其日期算术函数非常简单:

      LocalDate now = LocalDate.now();
      LocalDate firstDayOfCurrentMonth = now.withDayOfMonth(1);
      
      LocalDate firstDayOfLastMonth = firstDayOfCurrentMonth.minusMonths(1);
      LocalDate lastDayOfLastMonth = firstDayOfCurrentMonth.minusDays(1);
      

      【讨论】:

        【解决方案4】:

        如果您想获取当前日期之前的月份,请使用以下代码:

        LocalDate today = LocalDate.now(ZoneOffset.UTC);  // Retrieve the date now
        LocalDate lastMonth = today.minus(1, ChronoUnit.MONTHS); // Retrieve the date a month from now
        System.out.println("First day: " + lastMonth.withDayOfMonth(1)); // retrieve the first date
        System.out.println("Last day: " + lastMonth.withDayOfMonth(lastMonth.lengthOfMonth())); // retrieve the last date
        

        【讨论】:

        • 我想用LocalDate now = LocalDate.now(ZoneOffset.UTC);来设置UTC的时间。
        • @Arefe 我已经编辑了答案
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-05-29
        • 2013-06-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-22
        相关资源
        最近更新 更多