【问题标题】:Creating a custom java class which handles time创建一个处理时间的自定义 java 类
【发布时间】:2012-02-20 18:05:00
【问题描述】:

我创建了一个类来存储事件的持续时间。如您所见,我已经为每个字段创建了字段,但是将其保存为秒然后即时计算小时、分钟和秒会更好吗?我做的add方法如果这样做会更简单,但是有什么缺点吗?

public class Duration {

    private int hours;
    private int minutes;
    private int seconds;

    public Duration(int hours, int minutes, int seconds) {
        setHours(hours);
        setMinutes(minutes);
        setSeconds(seconds);
    }

    public int getHours() {
        return hours;
    }

    public void setHours(int hours) {
        this.hours = hours;
    }

    public int getMinutes() {
        return minutes;
    }

    public void setMinutes(int minutes) {
        this.minutes = minutes;
    }

    public int getSeconds() {
        return seconds;
    }

    public void setSeconds(int seconds) {
        this.seconds = seconds;
    }

    public void add(Duration duration) {

    }
}

【问题讨论】:

  • 这是作业吗?您是否需要不使用外部库?
  • stackoverflow.com/questions/439903/… - 你不必自己写这段代码。
  • 最好只存储秒并按需计算小时和分钟。否则,算术会更难。此外,您需要范围验证。
  • 见彼得的回答。如果您真的,真的想创建自己的课程,那么将其存储在(m)秒内并计算其他所有内容确实要好得多。否则你会引入很多错误。

标签: java


【解决方案1】:

使用现有的库会更好,例如Joda

【讨论】:

【解决方案2】:

除非您想在您的发行版中添加额外的 jar,否则我只会使用 java.util.Calendar。

【讨论】:

    【解决方案3】:

    考虑java.util.Date 类。

    诀窍在于Date 包含一个时间戳,表示为从格林威治标准时间 1970 年 1 月 1 日凌晨 12:00 起经过的毫秒数。该字段可以通过getTime()方法获取。

    要获取事件的持续时间,请创建两个 Date 对象(开始时间和停止时间),然后简单地减去两个时间戳(它们只是 long 值)。

    然后,要将其格式化为小时、分钟、秒等,您可以执行以下操作:

        long milliseconds = elapsedInMilliseconds % 1000;
        long seconds = elapsedInMilliseconds / 1000 % 60;
        long minutes = elapsedInMilliseconds / (60 * 1000) % 60;
        long hours = elapsedInMilliseconds / (60 * 60 * 1000) % 24;
        long days = elapsedInMilliseconds / (24 * 60 * 60 * 1000);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-19
      • 2016-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多