更新日期&每一段时间后的时间

时间:2015-04-21 13:15:09

标签: java

我想为我正在开发的小型Java实用程序创建自己的基本控制台日志。基本上是实时的,一切都很好;然而,有一小段代码困扰着我。我将简要介绍下面的所有代码。

注意:此处几乎所有代码都是未经测试/未经优化的。如果我做错了什么,让我知道,我很容易接受批评。

用于记录目的的静态变量:

static ArrayList<String> logs = new ArrayList<>();
static int offset = 0;
static DateFormat dateFormat = new SimpleDateFormat("yyy/MM/dd HH:mm:ss");
static Date date = new Date();

填充JTextArea的代码 - 这会附加日志消息并记住偏移量(因此我不会为已经记录的内容遍历整个ArrayList)。

public static void populateTextArea(final JTextArea textArea) {
  for(int i = offset; i < logs.size()-1; i++) {
      textArea.append(dateFormat.format(date) + ":  " + logs.get(i)+"\n");
  }
      offset = logs.size()-1;
}

以下内容每150ms自动更新一次控制台:

public static void timerLogging(final JTextArea textArea) {
Timer timer = new Timer(150, new java.awt.event.ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent e)
       {
           updateDateAndTime();
           populateTextArea(textArea);
       }
    });
    timer.start();
}

现在,以下部分困扰我:

public static void updateDateAndTime() {
    date = new Date();
}

有没有办法简单地做一些像date = GlobalDate.getCurrentDate();这样的事情?按照目前的方式设置,它不会产生一个小的开销(可能甚至没有注意到,但我不是'只是让它上班'那种人)?

2 个答案:

答案 0 :(得分:4)

没有&#34;开销&#34;谈论:每秒七次创建一个额外的对象并不算作开销。

但是,如果您希望保留相同的Date对象,则可以使用Date的默认构造函数使用的方式重新初始化它:

public static void updateDateAndTime() {
    date.setTime(System.currentTimeMillis());
}

答案 1 :(得分:2)

如果您在同一句话中看到Java和日期,则首先检查Joda Time

java.lang.Date是可变的,因此您可以保留相同的日期对象并更改它所代表的日期:

date.setTime(System.currentTimeMillis());

java.lang.Date可变的事实通常被认为是Java API设计方式的错误。今天和明天不是同一个日期,它们不应该是同一个对象。

Joda-Time和Java 8中的新java.time软件包主要使用immutable个对象。