Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从给定的时刻获取下一天的结束日期时间?(爪哇)_Java_Date_Time_Java Time - Fatal编程技术网

Java 如何从给定的时刻获取下一天的结束日期时间?(爪哇)

Java 如何从给定的时刻获取下一天的结束日期时间?(爪哇),java,date,time,java-time,Java,Date,Time,Java Time,我有一个即时日期,例如:2020-03-09T20:13:57.089Z,我想在即时中找到第二天的结尾,例如-2020-03-10T23:59:59.089Z与初始日期相比,这将是第二天的结尾 如何使用Java中的Instant实现这一点?如果需要实际的午夜00:00,可以使用: instant.plus(1, ChronoUnit.DAYS).truncatedTo(ChronoUnit.DAYS); 否则,另一个解决办法是: LocalDateTime ldt1 = LocalDateTi

我有一个即时日期,例如:2020-03-09T20:13:57.089Z,我想在即时中找到第二天的结尾,例如-2020-03-10T23:59:59.089Z与初始日期相比,这将是第二天的结尾


如何使用Java中的Instant实现这一点?

如果需要实际的午夜00:00,可以使用:

instant.plus(1, ChronoUnit.DAYS).truncatedTo(ChronoUnit.DAYS);
否则,另一个解决办法是:

LocalDateTime ldt1 = LocalDateTime.ofInstant(instant.plus(1, ChronoUnit.DAYS), ZoneId.systemDefault());

ldt1 = ldt1
        .withHour(23)
        .withMinute(59)
        .withSecond(59);

Instant result = ldt1.atZone(ZoneId.systemDefault()).toInstant();

如果需要实际午夜00:00,可以使用:

instant.plus(1, ChronoUnit.DAYS).truncatedTo(ChronoUnit.DAYS);
否则,另一个解决办法是:

LocalDateTime ldt1 = LocalDateTime.ofInstant(instant.plus(1, ChronoUnit.DAYS), ZoneId.systemDefault());

ldt1 = ldt1
        .withHour(23)
        .withMinute(59)
        .withSecond(59);

Instant result = ldt1.atZone(ZoneId.systemDefault()).toInstant();
一种方法是使用UTC时区将Instant转换为ZoneDateTime,并根据需要修改日期,然后将其转换回

正午:

一天结束时:

一种方法是使用UTC时区将Instant转换为ZoneDateTime,并根据需要修改日期,然后将其转换回

正午:

一天结束时:


不,我不想要真正的午夜,但第二天是11:59。对不起,我应该更清楚地回答这个问题。与ldt1.withHour23.withMinute59.withSecond59相比,我认为ldt1.toLocalDate.atTime23,59,59会更好,因为它将分数秒重置为0,并且中间对象更少。谢谢!我加了2天,减了一秒钟,就像你提到的那样,它成功了@Andreash与LocalDateTime的转换必须使用UTC时区完成,否则生成的时间将不是23:59:59Z这是真的!由于即时对象在默认情况下处理UTC,因此使用即时函数对其进行转换也很有效@安德烈亚斯诺,我不想要真正的午夜,但第二天是11:59。对不起,我应该更清楚地回答这个问题。与ldt1.withHour23.withMinute59.withSecond59相比,我认为ldt1.toLocalDate.atTime23,59,59会更好,因为它将分数秒重置为0,并且中间对象更少。谢谢!我加了2天,减了一秒钟,就像你提到的那样,它成功了@Andreash与LocalDateTime的转换必须使用UTC时区完成,否则生成的时间将不是23:59:59Z这是真的!由于即时对象在默认情况下处理UTC,因此使用即时函数对其进行转换也很有效@Andreasy,使用java.time,现代java日期和时间API,进行日期和时间工作。不,不要用23:59:59来代表一天的结束。将它表示为第二天的第一个时刻。它更简单,也更正确。只是要永远记住,这一天一直持续到那一刻。0.089秒从何而来?或者你只想要23:59:59?1你说的是午夜,你说的是11:59:59.089Z,这是中午,那么这是什么?-2是否需要像你展示的那样保留.089毫秒?如果是这样的话,你应该明确地说,以澄清你的要求。2020-03-10T11:59:59.089Z这将是第二天的结束。我从来没有想过中午也就是中午是一天的结束。你确定你不是指23:59:59吗?好的,第三次:样本显示的时间是11:59:59,也就是中午,但你要求一天的结束,也就是午夜,也就是23:59:59。请修正问题文本中的差异,即将11改为23,或将日终/午夜改为中午/正午。是的,使用java.time,现代java日期和时间API,进行日期和时间工作。不,不要用23:59:59来代表一天的结束。将它表示为第二天的第一个时刻。它更简单,也更正确。只是要永远记住,这一天一直持续到那一刻。0.089秒从何而来?或者你只想要23:59:59?1你说的是午夜,你说的是11:59:59.089Z,这是中午,那么这是什么?-2是否需要像你展示的那样保留.089毫秒?如果是这样的话,你应该明确地说,以澄清你的要求。2020-03-10T11:59:59.089Z这将是第二天的结束。我从来没有想过中午也就是中午是一天的结束。你确定你不是指23:59:59吗?好的,第三次:样本显示的时间是11:59:59,也就是中午,但你要求一天的结束,也就是午夜,也就是23:59:59。请修复您的问题文本中的差异,即将11改为23,或将一天结束/午夜改为中午/中午。请尝试我的更新代码,它提供了@YashDamaniGreat答案所需的内容。-但是,您应该使用atOffset而不是atZone。是的,我尝试过。我在问题上犯了一个错误,这是我的错。然而,我更新了我的问题,并相应地调整了解决方案。谢谢@DeadPool尝试我的更新代码它提供了@YashDamaniGreat答案所需的内容。-但是,你应该使用atOffset而不是atZone。是的,我尝试过。我在问题上犯了一个错误,这是我的错。然而,我更新了我的问题,并相应地调整了解决方案。谢谢@死侍