我有两个Date对象,我需要得到时间差,这样我就可以确定它们之间的总小时数.他们碰巧是在同一天.我想要的结果是小时和分钟.
当我在我的Date对象上使用.toString()时,我得到了这个:Fri Dec 18 08:08:10 CST 2009
我尝试过以下方法:
long diff=(this.endDate.getTime()-this.startDate.getTime())/(60*60 * 1000);
Run Code Online (Sandbox Code Playgroud)
但这只给我几小时,而不是分钟.我知道这是一个简单的问题,但我无法理解它.
编辑:感兴趣的人的最终解决方案.感谢Michael Brewer-Davis
Period p = new Period(this.startDate, this.endDate);
long hours = p.getHours();
long minutes = p.getMinutes();
String format = String.format("%%0%dd", 2);
return Long.toString(hours)+":"+String.format(format, minutes);
Run Code Online (Sandbox Code Playgroud)
Rob*_*Dam 69
这应该工作.
long secs = (this.endDate.getTime() - this.startDate.getTime()) / 1000;
int hours = secs / 3600;
secs = secs % 3600;
int mins = secs / 60;
secs = secs % 60;
Run Code Online (Sandbox Code Playgroud)
Mic*_*vis 62
以下是Joda时间的工作原理:
DateTime startTime, endTime;
Period p = new Period(startTime, endTime);
int hours = p.getHours();
int minutes = p.getMinutes();
Run Code Online (Sandbox Code Playgroud)
您可以使用Joda的格式化程序格式化,例如PeriodFormat,但我建议使用Java.有关详细信息,请参阅此问题.
小智 11
这是一个简单的方法:
private static int hoursDifference(Date date1, Date date2) {
final int MILLI_TO_HOUR = 1000 * 60 * 60;
return (int) (date1.getTime() - date2.getTime()) / MILLI_TO_HOUR;
}
Run Code Online (Sandbox Code Playgroud)
我想贡献现代(java 8+)答案。使用 Joda-Time 的解决方案很好。Joda-Time 项目处于维护模式,所以对于新代码我们不应该使用它。我遵循 Joda-Time 项目的官方建议并使用 java.time,现代 Java 日期和时间 API:
Duration dur = Duration.between(startDate, endDate);
String result = String.format("%d:%02d", dur.toHours(), dur.toMinutesPart());
System.out.println(result);
Run Code Online (Sandbox Code Playgroud)
如果startDate和endDate两者都具有类型InstantorOffsetDateTime或ZonedDateTimeor LocalDateTimeor ,则此方法有效LocalTime。所有提到的类型都来自java.time包。如果以 开头LocalDate,则调用任一atStartOfDay方法。
该toMinutesPart方法是在 Java 9 中引入的。如果您使用的是 Java 8(或 ThreeTen Backport),请搜索java format duration或类似以了解如何将持续时间格式化为小时和分钟。
来自 Joda-Time 主页的两句话:
现在要求用户迁移到
java.time(JSR-310)。请注意,Joda-Time 被认为是一个很大程度上“已完成”的项目。没有计划进行重大改进。如果使用 Java SE 8,请迁移到
java.time(JSR-310)。
| 归档时间: |
|
| 查看次数: |
69471 次 |
| 最近记录: |