web-dev-qa-db-ja.com

Java現在時刻を表示

アプリケーションを実行すると、現在の日時を示すコードがあります

DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Calendar cal = Calendar.getInstance();
System.out.println(dateFormat.format(cal.getTime()));

今それは私を示しています:それを実行すると2012/12/11 00:36:53.

しかし、それを実行中に時間をカウントしたいと思います。

したがって、例として00:37:53で実行すると、今回は表示されますが、開始時に00:37:53が必要であり、00:40:55で実行を停止します。 00:37:53、00:37:54、00:37:55というように表示されます。

どうすればこれを行うことができますか?

12
user1809035

javax.swing.Timer ? (インポートを間違えないでください。Timerクラスは他にもあります。)

public static void main(String... args) throws InterruptedException {
    final DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    int interval = 1000; // 1000 ms

    new Timer(interval, new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            Calendar now = Calendar.getInstance();
            System.out.println(dateFormat.format(now.getTime()));
        }
    }).start();

    Thread.currentThread().join();
}

これにより、毎秒ActionListenerの本体が実行され、現在の時刻が出力されます。

Thread.join最後の行での呼び出しは普遍的に必要なわけではありません。プロセスが手動で停止されるまで、このコード例を実行する必要があるだけです。それ以外の場合は、すぐに停止します。

実際のアプリケーションでは、それがSwingアプリである場合、タイマーはそれ自体でスレッド化を処理する必要があるため、心配する必要はありません。


編集する

上記のサンプルをアプリケーションに統合するのは非常に簡単です。initGUIメソッドに追加し、現在の時刻をSystem.outセットに出力する代わりに、指定されたラベルのテキストを変更します。

public void initGUI() {
    setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);        
    setPreferredSize(new Dimension(800, 600));
    setLayout(null);

    Calendar now = Calendar.getInstance();
    tijd = new JLabel(dateFormat.format(now.getTime()));
    tijd.setBounds(100, 100, 125, 125);
    window.add(tijd);

    new Timer(1000, new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            Calendar now = Calendar.getInstance();
            tijd.setText(dateFormat.format(now.getTime()));
        }
    }).start();

    pack();
}
6
Natix

Swing[〜#〜] swt [〜#〜]Vaadin のように、ユーザーインターフェイスの技術的なプラットフォームについて言及していません、ウェブなど。したがって、これらの詳細については触れません。ここでの基本的なアプローチは、すべてのUIテクノロジーに適用されます。

2つの基本的なアイデア:

  • ユーザーインターフェースで現在の瞬間を表す要素を作成します。テキストラベルや、アニメーションの時計の文字盤などの豪華なウィジェットを使用できます。
  • バックグラウンドスレッドは、そのUI要素の表示を更新する現在の瞬間を定期的にキャプチャします。バックグラウンドスレッドがUIスレッドに到達する方法に注意してください。適切なUI手法を使用して、新しい日時値を伝え、UIウィジェットを更新します。

執行者

Swingの場合、Swingタイマーが適切な場合があります(そのテクノロジーの現在のステータスがわからない)。しかし、それ以外の場合は、ScheduledExecutorServiceを使用して別のスレッドで現在の瞬間を繰り返しキャプチャする方法を学びます。 Stack Overflowを検索して、Executorの詳細を確認してください。

Java.time

Instantクラスを使用して、タイムライン上の現在の瞬間をUTCでナノ秒までの解像度でキャプチャします。

Instant now = Instant.now();

そのオブジェクトをUIスレッドに渡します。

UIスレッドで、ユーザーの希望/予想タイムゾーンZoneIdを適用してZonedDateTimeを作成します。

ZoneId z = ZoneId.of( "Pacific/Auckland" ) ;
ZobedDateTime zdt = instant.atZone( z ) ;

その日時を表す文字列が必要な場合は、toStringを呼び出すか、DateTimeFormatterを使用します。 ofLocalized…メソッド(DateTimeFormatter)。

詳細については、スタックオーバーフローで何百もの関連する質問と回答を検索してください。

2
Basil Bourque

これを試すことができます

import Java.awt.*;
import Java.awt.event.*;
import Java.util.Date;
import Java.lang.Thread;

public class TimeInSeconds extends Frame implements Runnable
{
    private Label lblOne;
    private Date dd;
    private Thread th;

    public TimeInSeconds()
    {
        setTitle("Current time");
        setSize(200,150);
        setVisible(true);
        setLayout(new FlowLayout());
        addWindowListener(new WindowAdapter() {
            public void windowClose(WindowEvent we){
                System.exit(0);
            }
        });
        lblOne = new Label("00:00:00");
        add(lblOne);

        th = new Thread(this);
        th.start(); // here thread starts
    }

    public void run()
    {
        try
        {
            do
            {
                dd = new Date();
                lblOne.setText(dd.getHours() + " : " + dd.getMinutes() + " : " + dd.getSeconds());
                Thread.sleep(1000);  // 1000 = 1 second
            }while(th.isAlive());
        }
        catch(Exception e)
        {

        }
    }

    public static void main(String[] args)
    {
        new TimeInSeconds();
    }
}

このプログラムを実行して、出力を取得できます。

日付と時刻の詳細については、Javaのリンクを参照してください。

https://docs.Oracle.com/javase/tutorial/datetime/iso/datetime.html

https://docs.Oracle.com/javase/7/docs/api/Java/sql/Date.html

http://www.flowerbrackets.com/date-time-Java-program/

1
Shiva

形式としてhh:mmを使用した単純な日付フォーマッターを使用します。

SimpleDateFormat sdf = new SimpleDateFormat("HH:MM a");

完全なプログラムについてはここをクリックしてください。

0
user2824143
    public void ShowTime() {
        new Timer(0, new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                Date d = new Date();
                SimpleDateFormat s = new SimpleDateFormat("dd/MM/yyy hh:mm:ss a");
                time.setText(s.format(d));                 //time= jlabel 
            }
        }).start();
    }

時間を継続的に変更(毎秒更新)

0
Anupam 1

Incrementステートメントを使用してループを追加すると、クロックは指定された条件になるまで時を刻み続けます。

0
user6514497