gpt4 book ai didi

java - 在java中计算两个时间戳之差的最简单方法是什么?

转载 作者:行者123 更新时间:2023-12-01 23:23:46 25 4
gpt4 key购买 nike

我有一个表(数组),其中包含个人的当前时间和出发时间。

当前时间 = CT,出发时间 = DT

第 1 人 - CT:中午 12:00 |美国东部时间:下午 2:002 人 - CT:上午 9:30 |美国夏令时间:上午 10:30第 3 人 - CT:下午 1:00 |美国东部时间:下午 2:154 人 - CT:上午 8:00 |美国东部时间:下午 3:45

我想计算每次之间的差异(以分钟为单位)。

<小时/>

在我知道如何计算两次时间之间的差异(以分钟为单位)之后,我必须弄清楚如何计算中转时间。这意味着,我必须计算出航类之间的时间间隔。

出发时间 = DT,到达时间 = AT第五个人今天很忙,必须在不同的地方做一些不同的事情。

DT:上​​午 11:30 | AT:中午 12:15(停留时间) DT:下午 1:15 |时间:下午 3:45(停留时间) DT: 下午 4:00 |时间:下午 6:45(停留时间) DT: 晚上 10:15 |于:晚上 11:00

我需要找到每个航类之间的中转时间。我该怎么做呢?

最佳答案

不清楚的问题

你的问题不清楚。请参阅我对似乎是两三个不同问题的评论。此外,您还忽略了任何日期和时区的提及,如果您想考虑夏令时和其他异常情况,这两者都至关重要。尽管如此,我还是会给出一些答案。

乔达时间

使用Joda-Time 2.3,第三方库旨在替换臭名昭著的糟糕 java.util.Date/Calendar 类。

时间跨度

在这个问题中了解 Joda-Time 中的三种时间跨度:Joda-Time: what's the difference between Period, Interval and Duration?

瞬间对

你的三个问题似乎涉及宇宙时间轴上的点对:

  • 当前时间和出发时间(每个人)
  • 出发时间和到达时间(每个航类)
  • 到达时间和出发时间(每次中途停留)

表示由时间线上的一对瞬间定义的时间跨度恰好是 Interval 的目的。类。

分钟

如果您需要分钟数,请使用Minutes类。

示例代码

Java 7 上的 Joda-Time 2.3 中的一些示例代码。

// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.
// import org.joda.time.*;

DateTimeZone denverTimeZone = DateTimeZone.forID( "America/Denver" );

// Person 1 - CT: 12:00 PM | DT: 2:00 PM
DateTime person1_start = new DateTime( 2013, DateTimeConstants.NOVEMBER, 3, 12, 00, denverTimeZone ); // year, month, day, hour, minutes
DateTime person1_stop = new DateTime( 2013, DateTimeConstants.NOVEMBER, 3, 14, 00, denverTimeZone );
Interval person1_interval = new Interval( person1_start, person1_stop );
Duration person1_duration = person1_interval.toDuration();
Minutes person1_minutes = person1_duration.toStandardMinutes();
Minutes person1_minutes_shortcut = Minutes.minutesBetween( person1_start, person1_stop ); // More direct, but you might want Interval object for other work.

// By default, the 'toString' on a Minutes object uses the ISO 8601 standard format for durations: https://en.wikipedia.org/wiki/ISO_8601#Durations
// In this case: PT120M
System.out.println( "person1_minutes: " + person1_minutes );
System.out.println( "person1_minutes_shortcut: " + person1_minutes_shortcut );
// Convert to a number.
int person1_minutesAsInt = person1_minutes.getMinutes();
System.out.println( "person1_minutesAsInt: " + person1_minutesAsInt );

// Person 2 - Not taken from question. I changed to earlier on this same day to show effect of Daylight Saving Time (DST).
DateTime person2_start = new DateTime( 2013, DateTimeConstants.NOVEMBER, 2, 23, 00, denverTimeZone ); // year, month, day, hour, minutes
DateTime person2_stop = new DateTime( 2013, DateTimeConstants.NOVEMBER, 3, 3, 00, denverTimeZone );
int person2_minutesAsInt = Minutes.minutesBetween( person2_start, person2_stop ).getMinutes();
// How many hours between 11 PM and 3 AM? 4 hours? Not on the day DST ends. 5 hours.
// 4 hours * 60 minutes = 240 minutes. 5 hours * 60 minutes = 300 minutes.
System.out.println( "person2_minutesAsInt: " + person2_minutesAsInt ); // 300 is correct answer.

运行时...

person1_minutes: PT120M
person1_minutes_shortcut: PT120M
person1_minutesAsInt: 120
person2_minutesAsInt: 300

UTC 是你的 friend

重要提示:使用 UTC .

请勿将分区日期时间用于此类工作。时区、夏令时等经常发生不可预测的变化,甚至在最后一刻也是如此。通常最好转换为 UTC(祖鲁时间),然后进行所有工作和存储。转换回分区日期时间仅用于向用户显示。

您可能还想将分区日期时间存储为历史记录。当您稍后从 UTC 重新创建分区日期-时间时,分区日期-时间可能会有所不同,因为在此期间时区和 DST 的法律/政治定义发生了变化。

// Person 1 - CT: 12:00 PM | DT: 2:00 PM
DateTime person1_start = new DateTime( 2013, DateTimeConstants.NOVEMBER, 3, 12, 00, denverTimeZone ); // year, month, day, hour, minutes
DateTime person1_start_inUTC = person1_start.toDateTime( DateTimeZone.UTC );

System.out.println( "person1_start: " + person1_start );
System.out.println( "person1_start_inUTC: " + person1_start_inUTC );

运行时...

person1_start: 2013-11-03T12:00:00.000-07:00
person1_start_inUTC: 2013-11-03T19:00:00.000Z

关于java - 在java中计算两个时间戳之差的最简单方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20319900/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com