【问题标题】:Java how to calculate time differencesJava如何计算时差
【发布时间】:2010-09-28 05:47:12
【问题描述】:

如果用户输入为 2255 和 2305 输出应为 10 分钟,我如何计算 24 小时的时差。我的想法是将输入分成 2 部分,2 位和 2 位。前 2 位数字是小时,将其乘以 60 以使其变为分钟。然后将其与第二个 2 位数字相加,然后计算差异。我不想使用任何日期日历数据类型或 API 来解决它。谢谢

【问题讨论】:

  • @user236501 - 我回滚了你的问题,因为已经发布了答案。这将允许其他有您的问题的人找到答案。 (“对不起,请忽略”对任何人都没有帮助)

标签: java time


【解决方案1】:
    String time1 = "2255";
    String time2 = "2305";

    SimpleDateFormat format = new SimpleDateFormat("HHmm");
    Date date1 = format.parse(time1);
    Date date2 = format.parse(time2);
    long difference = date2.getTime() - date1.getTime();        

差异以毫秒为单位,您可以将其转换为任何单位,也可以使用 apache-commons 中的 DurationFormatUtils 对其进行漂亮的格式化。

System.out.println("Duration: "+DurationFormatUtils.formatDuration(difference, "HH:mm"));

apache commons 有非常好的实用功能,apache-commons (lang)

【讨论】:

    【解决方案2】:

    如何在不使用 String chartAt 的情况下获取前 2 位数字。

    最高两位数:数字/100 最低两位数:数字 % 100

    但是如果用户输入 3:05 或 3-05,你会怎么做?我认为这是可用性的问题。最好的解决方案是让 UI 对用户来说绝对是可以理解的。例如,您可以使用单独的字段来表示小时和分钟。

    【讨论】:

    • 如果开始时间为0025,结束时间为0035,表示已经是第二天了
    • 你的意思是开始时间是0035,结束时间是0025?所以你需要规范化否定结果(24 * 60 + (25 - 35))。但是如果结束时间是开始前两天呢?正如我已经说过的,我认为这是可用性问题。开发人员应根据输入值的确切含义对输入进行控制。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-17
    • 2021-10-20
    • 1970-01-01
    • 2020-01-28
    • 1970-01-01
    • 2022-11-30
    相关资源
    最近更新 更多