본문 바로가기

프로그래밍/Android 짜투리 지식

[자바] 컴퓨터 시간 가져오기

시도 :

알람기능을 사용하고싶다.

생각 :
 
1. 알람을 하려면 시간이 필요하다.
2. 시간은 숫자를 카운트해서 할 수있다.(지금으로부터 얼마 후,
3. 시간은 컴퓨터 시스템 정보를 가져올 수 있다.(어느시간에,
4. 시간을 가져와서 해보자.

알고리즘 :

1. 쓰레드를 구현하여서 시간을 항시 체크한다.
2. 쓰레드의 구현부(내 사수 이름ㅋㅋㅋ)에서 지정한 시간과 현재시간이 일치하는지 체크
3. 조건이 만족되면 알람으로 동작하고자 하는 프로그램을 ON시킨다.
4. 일정 시간이 지나면 프로그램을 OFF시킨다.

구현 :

구현은 자바 애플릿에 이미 구현되어있는 Clock 소스를 이용하였다.

import java.util.*;
import java.awt.*;
import java.applet.*;
import java.text.*;

public class test_digital_clock extends Applet implements Runnable {
    private volatile Thread timer;       // The thread that displays clock
    private SimpleDateFormat formatter;  // Formats the date displayed
    private String lastdate;             // String to hold date displayed
    private Date currentDate;            // Used to get date to display
    private Color numberColor;           // Color of second hand and numbers
    private String startTime;
    private String nowTime;
    
    public void init() {
        formatter = new SimpleDateFormat ("EEE MMM dd hh:mm:ss yyyy", Locale.getDefault());
        currentDate = new Date();
        lastdate = formatter.format(currentDate);
        startTime = "10:37";
        numberColor = Color.darkGray;
        resize(300,300);              // Set clock window size
    }

    // Paint is the main part of the program
    public void use(Graphics g) {
        String today;
        currentDate = new Date();
        formatter.applyPattern("EEE MMM dd HH:mm:ss yyyy");
        today = formatter.format(currentDate);

        g.setColor(getBackground());
        g.drawString(lastdate, 5, 125);

        g.setColor(numberColor);
        g.drawString(today, 5, 125);    

        lastdate = today;
        currentDate = null;
    }
    
    public void start() {
        timer = new Thread(this);
        timer.start();
    }

    public void stop() {
        timer = null;
    }

	public void run() {
        Thread me = Thread.currentThread();
        while (timer == me) {
            try {
                Thread.currentThread();
				Thread.sleep(100);
            } catch (InterruptedException e) {
            }
            formatter.applyPattern("HH:mm");
            Date newDate = new Date();
            nowTime = formatter.format(newDate);
          
            if(startTime.equals(nowTime))
            {
           		formatter.applyPattern("EEE MMM dd HH:mm:ss yyyy");
            	Graphics g = this.getGraphics();
            	use(g);
            }
            
        }
    }
}


고찰:

SimpleDateFormat 클래스
SimpleDateFormat(String pattern, Locale locale)

yyyy : 년도
w : 일년에 몇번째 주인지
W : 한달에 몇번째 주인지
MM : 월
dd : 일
D : 일년에 몇번째 일인지
E : 요일
F : 요일(숫자)
hh : 12시간제 시간
HH : 24시간제 시간
KK : 24시간제 시간(단, 24시는 0시)
a : 오전, 오후
mm : 분
ss : 초
SSS : 미리세컨드

사용법

SimpleDateFormat SDf = new SimpleDateFormat("hh:mm:ss"); 
// 00:00:00의 형식을 가짐

또, 생성때 형식을 지정하지 않고 후에 지정할 수도 있다.
SimpleDateFormat SDf = new SimpleDateFormat();
SDf.applyPattern("hh:mm:ss");

또, 이걸 문자열로 저장할 수 있다.
SimpleDateFormat SDf = new SimpleDateFormat();
SDf.applyPattern("hh:mm:ss");
Date date = new Date(); // 현재 Date정보를 가져옴.
String today = SDf.format(date);


위는 SimpleDateFormat 클래스를이용하였는데 아니면
System.currentTimeMillis();
요게 현재시간을 long형 정보로 빼내주는데

이걸 SimpleDateFormat 인스턴스에 타입캐스팅 시켜주면 또 자동으로 현재 시간이 뽑혀져 나온다.

long time = System.currentTimeMillis();
SimpleDateFormat SDf = new SimpleDateForamt();
String str = SDf.format(time); // 문자열 정보로 저장