java - 获取正确的小时和分钟时出错
问题描述
public class Testdate_time {
public void testdate() throws ParseException {
String in_time = "2018 May 07 09:20:01 AM";
String out_time = "2018 May 07 10:08:29 AM";
int hours = 0;
int mintues = 0;
org.joda.time.format.DateTimeFormatter format = DateTimeFormat.forPattern("yyyy MMM dd hh:mm:ss a");
DateTime date1 = format.parseDateTime(in_time);
DateTime date2 = format.parseDateTime(out_time);
hours = Hours.hoursBetween(date1, date2).getHours();
String strhours = String.valueOf(hours).replaceAll("-", "");
mintues = date1.getMinuteOfHour() - date2.getMinuteOfHour();
String Strminutes = String.valueOf(mintues).replaceAll("-", "");
System.out.println("hours" + strhours);
System.out.println("minutes" + Strminutes);
}
public static void main(String[] args) throws ParseException {
new Testdate_time().testdate();
}
我也使用了 jodatime 和 simpledateformat http://www.joda.org/joda-time/userguide.html
输出:
hours0
minutes12
解决方案
要正确计算两个日期之间的小时和分钟,使用 Java 8 Time API 并忽略夏令时,您可以这样做:
String in_time = "2018 May 07 09:20:01 AM";
String out_time = "2018 May 07 10:08:29 AM";
DateTimeFormatter format = DateTimeFormatter.ofPattern("uuuu MMM dd hh:mm:ss a", Locale.US);
LocalDateTime date1 = LocalDateTime.parse(in_time, format);
LocalDateTime date2 = LocalDateTime.parse(out_time, format);
long diff = ChronoUnit.MINUTES.between(date1, date2);
System.out.printf("%d hours %d minutes%n", diff / 60, diff % 60);
或者,如果您不想自己计算,请使用Duration
:
Duration duration = Duration.between(date1, date2);
System.out.printf("%d hours %d minutes%n", duration.toHours(), duration.toMinutesPart());
输出(来自两者)
0 hours 48 minutes
推荐阅读
- java - 依赖项更改时强制类重新编译
- python - SQL:从表中选择行,其中列的每个元素都是矩阵?
- java - 运行 JUnit 测试有效,但 Gradle 测试无效。怎么修?
- c# - 如何在 Windows 注册表中输入十六进制值作为 DWORD?
- c# - 混合泛型、非泛型和基类设计问题
- c++ - C++ 预处理器:稍后推迟宏调用
- python - 从 woocommerce 在线商店刮取产品尺寸的问题
- amazon-web-services - 有没有办法以编程方式控制 Alexa?
- css - 条纹元素和 Bootstrap 4.1 css 冲突
- javascript - FindOneAndUpdate 对我来说无法正常工作