当前位置: 首页 > 知识库问答 >
问题:

Java日期在同一天或同月

周辰沛
2023-03-14

我需要编写一个方法,以YYYY-MM-DD格式将Date作为输入参数,并返回列表中同一天的所有日期。

列表中的日期如下:2020-06-09T07:10:28.1985307Z

我是否需要使用“-”split解析参数,并将字符串的MM部分与列表日期的MM部分进行比较?这似乎太复杂了,你能给我一些建议如何更好地解决这个问题吗?

共有3个答案

公孙芷阳
2023-03-14

1-将输入字符串转换为LocalDate

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");


LocalDate date = LocalDate.parse(str, formatter);

2-有了LocalDate,您可以执行许多操作,例如检索当前日期、月份、年份等。解析所有日期并实现您的逻辑,以下是一些相关的方法:

    date.getDayOfYear();
    date.minusMonths();
    date.isBefore();
爱炯
2023-03-14

日期类已过时。使用LocalDate和ZoneDateTime作为解决方案。

public class Test {

    public static void main(String[] args){
        Test t = new Test();
        List<LocalDate> result = t.fetchDates(LocalDate.parse("2020-06-09"));
        System.out.println(result);
    }

    private List<ZonedDateTime> datesList = List.of(
            ZonedDateTime.parse("2020-06-09T07:10:28.1985307Z"),
            ZonedDateTime.parse("2020-06-01T01:10:28.1985307Z"),
            ZonedDateTime.parse("2020-06-09T01:10:28.1985307Z"),
            ZonedDateTime.parse("2020-06-08T01:10:28.1985307Z"),
            ZonedDateTime.parse("2020-06-09T01:10:28.1985307Z")
            );


    public List<LocalDate> fetchDates(LocalDate date)
    {
        return datesList.stream()
                .filter(zdt -> zdt.toLocalDate().equals(date))
                .map(zdt -> zdt.toLocalDate())
                .collect(Collectors.toList());
    }
}

印刷品[2020-06-092020-06-092020-06-09]

谢修真
2023-03-14

你说“格式为YYYY-MM-DD”,这意味着你实际上得到的是字符串对象,而不是日期对象。日期、LocalDates、Instant等没有格式。它们代表的是它们的命名对象(除了日期,它的命名严重错误,实际上代表的是一个基于epochmillis的无时区瞬间,与人类的日期概念完全没有任何关系)。

要处理约会,你需要。。有日期对象。或者更确切地说,是来自java的正确类型。时间套餐。如果只是一个日期,那么您要查找的是LocalDate。这些都是无时间限制的。它们只是代表了“1985年4月4日”的概念,而不涉及地点。你的输入不是日期。它们实际上是时间上的瞬间,因为这是一个精确指定的时间(6位数字代表秒分数),并且包含一个时区,这是一个人类甚至无法用于正常目的的时区。这表明你真正想要的是即时的。

然后你想做一些非常奇怪的事情:查看日期。你把时间的概念和约会的概念混为一谈,约会根本不是时间的概念。毕竟,如果荷兰是4月4日,纽约很可能是4月3日。如果莫斯科是1917年10月25日,阿姆斯特丹是11月7日。如果不先本地化,就试图将“日期”等同起来是毫无意义的。你在问谁?他们住在哪里?

有很多方法可以在java中转换各种类型。时间从瞬间打包到日期再打包。这里有一种方法:

public static Instant read(String in) {
    return Instant.parse(in);
}

public static LocalDate localize(Instant i, ZoneId zone) {
    return i.atZone(zone).toLocalDate();
}

public static void main(String[] args) throws Exception {
    Instant a = Instant.parse("2020-06-09T07:10:28.1985307Z");
    Instant b = Instant.parse("2020-04-09T07:10:28.1985307Z");
    Instant c = Instant.parse("2020-06-09T23:10:28.1985307Z");

    ZoneId ams = ZoneId.of("Europe/Amsterdam");

    LocalDate aDate = localize(a, ams);
    LocalDate bDate = localize(b, ams);
    LocalDate cDate = localize(c, ams);

    System.out.println(aDate.isEqual(cDate));
}

上面的将最终打印'false'。由2020-06-09T07:10:28.1985307Z描述的时间瞬间将被阿姆斯特丹的某人描述为2020年6月9日。即时2020-06-09T23:10:28.1985307Z将被描述为第10次(阿姆斯特丹将在0200点)。把区域切换到纽约,答案将是正确的。

这两个瞬间是同一天的问题不是一个理智的问题,如果不包括在那个问题中问的是哪个区域。请注意,UTC本身是一个区域,您可以使用它:ZoneId utc=ZoneOffset。UTC;会让你到达那里。

 类似资料:
  • 问题内容: 即使是同一天,此条件也总是计算为,因为它正在比较时间。 如何检查日期是否与同一天? 问题答案: 如果您只想比较日期, 或者,显然 如果要检查它们是 同一 日期。 该文档通常很有帮助。通常,它也是的第一个Google搜索结果。除非您的问题与名为“ snake”的功能/模块有关。 基本上,模块具有三种存储时间点的类型: 年,月,日 时,分,秒,微秒,时区信息 结合日期和时间。它具有方法和获

  • 我有两个日历日期,我得到了天、小时和分钟之间的差异。 如果结束日期大于开始日期,则此操作非常有效。如果开始日期与结束日期在一周中的同一天,但早于结束日期,则不起作用。例如:结束日期为周六下午2:20,开始日期为周六下午7:20。它的计算时间大约为0天5小时。但是,应该是7天。 这是代码 如何处理结束日期与开始日期同一天,但结束日期是开始日期之前的时间? 谢谢 编辑 我想我解决了我的问题。我为其他有

  • 问题内容: 如果我在Java(Android)中有两个日期(日期1和日期2),如何知道日期2是否在日期1的同一天内?(注意:如果Date2-Date1 <24小时则不是)。一些示例(支持相同的月份和年份) 谢谢 问题答案: 你为什么不使用? 您可以直接调用isSameDay之类的方法 检查Apache DateUtils。

  • 原始关闭原因未解决 JavaScript Date对象将日期与时间进行比较,因此,如果您比较:< code > time 1 . gettime()= = = time 2 . gettime(),如果至少有一毫秒的差异,它们将为“false”。 我们需要的是有一个很好的方法来比较小时,天,周,月,年?其中一些很容易,比如 year: 但是对于日、月、小时,它更复杂,因为它需要多个验证或划分。 是

  • 我需要我的Java Android应用程序来提取和比较日期,但是要获得正确的日期一团糟。 实际运行时间:2022年1月10日周一22:29 结果: 日期当前时间=星期一 一月 10 22:29:53 GMT 01:00 2022 (正确日期) 日历.get(日历年)=2022.0.10 21:29:53 (错误的月份,错误的小时) 当前时间.getyear()=122.0.1 22:29:53 (

  • 问题内容: 我刚刚从Gord Thompson那里得到了一个类似问题的大力帮助(通过在同一日期或最接近的先前日期(不仅是完全匹配)进行联接来合并两个表),但现在意识到我的数据不是我所期望的。事实证明,我的Lead_Dates可以晚于Product_Interest_Dates,这导致先前的SQL代码删除了这些情况。进一步来说: 我有两个表: 顾客ID Lead_Date Lead_Source 和