【问题标题】:Java Hour to Minutes Simple conversionJava 小时到分钟的简单转换
【发布时间】:2014-05-07 19:45:13
【问题描述】:

我正在开发一个简单的程序,给出 2 次(1015 和 1025 以及 0925 和 1010)将返回它们之间的时间差(以分钟为单位)。

所以

1015 和 1025 -> 10 分钟差异

【问题讨论】:

  • 您的示例时间不包含您的代码正在寻找的: 分隔符。
  • (如果您确实将时间作为连续数字,我将转换为 int,使用除/模除以 100 以拆分为小时和分钟,然后将小时乘以 60 并将两个值加回在一起以获得可比较的分钟数。)
  • (请注意,这 -- String[] str_array = "FirstTimeString1:FirstTimeString2".split(":"); -- 不会将 FirstTimeString1 和 FirstTimeString2 替换到字符串中,因为整个字符串都是文字。)
  • Java 代码与 C 不同,必须存在于类中,没有 public class CLASS-NAME { .. Code here .. } 就无法编译。

标签: java string compiler-errors int typeconverter


【解决方案1】:

使用时间和日期的正确方法是使用时间/日期实用程序库。尝试自己手动进行数学运算是一个很好的方法,可以让自己在脚下开枪。

如果您没有运行 Java 8,您的两个最佳选择是 Joda-Time,或者如果您运行的是 java.time 包。

我会给你一个 Joda-Time 的例子,因为 遗憾地没有运行 Java 8,但是当我有一个 Java 8 示例时,我也会更新这个答案机会。它们在功能上非常相似(java.time 主要基于 Joda-Time)。

LocalTime nineTwentyFive = new LocalTime(9, 25);
LocalTime tenTen = new LocalTime(10, 10);
LocalTime tenFifteen = new LocalTime(10, 15);
LocalTime tenTwentyFive = new LocalTime(10, 25);

System.out.println(Minutes.minutesBetween(tenFifteen, tenTwentyFive).getMinutes());
System.out.println(Minutes.minutesBetween(nineTwentyFive, tenTen).getMinutes());
10
45

这两个库都经过了高度测试并且很受欢迎,这意味着您可以相信它们能够开箱即用地做正确的事情,即使在您没有预料到的极端情况下也是如此。不要自己重新实现此行为。

【讨论】:

    【解决方案2】:

    这个简单的数学公式会给你答案:

    ((10*60 +10) - (9*60 + 25))
    

    所以现在你需要做的就是:

    1. 将 4 位字符串拆分为 2 个组号。
    2. 通过将小时转换为分钟并将它们添加到分钟新数字中来计算分钟。
    3. 用较小的数字减去较大的数字。

    哇!

    代码示例:

    public class goFile {
        public static int SubtractTime(String number1, String number2)
        {
            return Math.abs(ConvertTimeToMinutes(number2) - ConvertTimeToMinutes(number1));
        }
    
        public static int ConvertTimeToMinutes(String number)
        {
            return Integer.parseInt(number.substring(0, 2))*60 + Integer.parseInt(number.substring(2, 4));
        }
    
        public static void main(String[] args) {
            System.out.println(SubtractTime("0925", "1010"));
            System.out.println(SubtractTime("1015", "1025"));
        }
    }
    

    【讨论】:

    • :D 这是我在第一个代码中所做的,但我得到了很多编译错误..不知道为什么:/
    • 如果您要将时间表示为字符串(不,不,不!),请至少遵循标准约定,例如用 : 分隔小时和分钟...
    • @dimo414,我使用了用户输入,因为我不能假设我对她的限制一无所知,或者她是否可以操纵给她的输入。如果她能提供更多细节,很多事情都会有所不同。此外,仅将一个全新的库用于 1 个简单的功能,尤其是如果她只需要一次,这是一种矫枉过正的做法,而且浪费时间/代码 + 程序开销。如果我只想切面包一次,我不会使用光剑。
    • 两者都公平,但我们也应该鼓励最佳实践和教育;问题中没有任何内容涉及“需要”将时间表示为非分隔字符串,并且这样做会导致更多问题,我们应该指出这一点。此外,即使它是一次性应用程序,Time-math 也会很快变得比预期的更复杂(Java 日历实用程序很好地证明了这一点)。您的回答肯定是“正确的”,并且可能解决了用户的问题,但这并不是一个好的做法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-01
    • 2015-07-20
    相关资源
    最近更新 更多