java - Java AM/PM 时差

标签 java time duration timeofday

我试图通过输入时间格式计算12小时内的java时差,当我输入开始时间11:58:10 pm和结束时间12:02时效果很好:15 点。但当我输入 12:00:00 am 和 12:00:00 pm 时,它会给出 0 分钟的差异。不知道为什么。下面是我的代码,请告诉我哪里错了。

Scanner input = new Scanner(System.in);
System.out.print("Enter start time (HH:mm:ss aa): ");
String starttime = input.nextLine();

System.out.print("Enter end time (HH:mm:ss aa): ");
String endtime = input.nextLine();

//HH converts hour in 24 hours format (0-23), day calculation
SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss aa");

Date d1 = null;
Date d2 = null;

try {
    d1 = format.parse(starttime);
    d2 = format.parse(endtime);

    //in milliseconds
    long diff = d2.getTime() - d1.getTime();

    long diffSeconds = diff / 1000 % 60;
    long diffMinutes = diff / (60 * 1000) % 60;

    System.out.print(diffMinutes + " minutes and "+diffSeconds + " seconds.");
} catch (Exception e) {
    System.out.println("Invalid fromat");
}

最佳答案

新的java.time方法LocalTimeDateTimeFormatterDuration提供了更好的方法来处理这个问题。例如:

DateTimeFormatter format = DateTimeFormatter.ofPattern("h:m:s a");

LocalTime time1 = LocalTime.parse("12:00:00 am", format);
LocalTime time2 = LocalTime.parse("2:00:20 pm", format);

Duration dur = Duration.between(time1, time2);

System.out.println(dur.toMinutes() + " minutes " + dur.toSecondsPart() + " seconds");

注意:Duration.toSecondsPart 需要 Java 9 或更高版本,此代码的其余部分需要 Java 8 或更高版本。

关于java - Java AM/PM 时差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60512711/

相关文章:

python - Python的pyautogui.PAUSE和time.sleep有什么区别?

android - 在动态壁纸上逐帧显示

android - MediaMetadataRetriever 中媒体持续时间的测量单位是什么

c# - 从 0 :00 or 00:00 to 00:00:00 转换持续时间

java - 在方法外部定义变量并获取其返回值

java - View 中的 Android 捏合/双指旋转

javascript - 如何用foreach时间制作图表

excel - 如何在excel中计算时间?

java - 矩阵求逆的简单算法

java - Hazelcast NearCache 对性能没有预期的影响