【问题标题】:Working out time between 7am to 3:30pm - JAVA [closed]早上 7 点到下午 3:30 之间的锻炼时间 - JAVA [关闭]
【发布时间】:2018-07-06 15:44:05
【问题描述】:

我创建了这个程序来计算 startWork 和 finishWork 之间的时间 但我似乎无法弄清楚如何计算时间...... 这是我的界面。

只是想知道一种计算方法。

谢谢

【问题讨论】:

标签: java time timedelta calculation


【解决方案1】:

使用java.time 中的Duration 类来表示您的工作时间。让Duration.between() 为您进行计算,适当时将两个LocalTime 或两个ZonedDateTime 对象传递给它。如果这种转换发生在工作时间,后者会将夏令时 (DST) 的转换纳入计算。

如果输入的时间例如为15303:30pm,则定义一个DateTimeFormatter 以将其解析为LocalTime

Duration对象可以使用其plus方法求和,因此可以计算每小时和每月的工作时间等等。

要将工作时间格式化为例如8.5(8小时30分钟),请使用toMinutes方法,然后在除以60之前转换为double(我将常量60声明为@987654336 @)。

java.time

java.time 是现代 Java 日期和时间 API。它在近 4 年前问世,用于替换上一千年最后几年 Java 1.0 和 1.1 中过时且设计不佳的日期和时间类。

链接: Oracle Tutorial trail Date Time

【讨论】:

    【解决方案2】:

    按照Ole V.V. 的建议使用java.time

    String time1 = "07:00:00";
    String time2 = "15:30:12";
    LocalTime t1 = LocalTime.parse(time1);
    LocalTime t2 = LocalTime.parse(time2);
    Duration diff = Duration.between(t1, t2);
    System.out.println(diff.toString());
    

    打印:

    PT8H30M12S

    【讨论】:

    • 因此,使用从 07:00:00 到 15:00:00 的代码,它会打印 8,这是正确的 如果我将其更改为 07:00:00 到 15:30:00,它会打印 8不正确 我将如何将输出更改为打印 8.5?
    • 请注意java.util.Date 是旧版。
    • 请不要教年轻人使用早已过时且臭名昭著的SimpleDateFormat类。今天我们在java.time, the modern Java date and time API, 和它的DateTimeFormatter 中做得更好。更不用说它的LocalTime,它比过时的Date更符合需求。
    • @OleV.V.谢谢我已经更新了答案..
    • 使用 LocalTime 无法解决夏令时 (DST) 等异常情况。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多