티스토리 뷰

728x90

타이머 컨트롤은 아래의 그림처럼 윈도우 폼에 표시되는 형태가 아니라 백그라운드에서 동작하는 컨트롤이기 때문에 툴박스에서 디자인 편집창에 끌어다 놓으면 디자이너 작업 영역 하단에 컨트롤을 표시합니다.


우측 타이머의 속성에서 Enabled가 기본은 False로 되어 있는데 이 값을 True로 바꾸어 주거나 폼이 로딩 될때(Form1_Load) True로 변경해주어야 타이머 이벤트를 받을 수 있습니다. 되도록 폼의 로딩 이벤트를 받아 타이머를 가동시키는 것이 안정적 운용에 좋습니다. 또한, Enabled를 True/False로 설정해서 타이머 이벤트를 제어할 수도 있지만 Start(), Stop() 메소드를 사용할 수도 있습니다.

타이머 이벤트는 Interval에 설정한 간격으로 전해지며 Interval 속성 값은 밀리초 단위로 입력을 받으므로 1초 간격으로 이벤트를 받으려면 1000을 설정해야 합니다. 타이머 이벤트 처리 루틴을(_Tick) 작성하려면 타이머 컨트롤을 더블클릭하면 됩니다. 아래의 코드는 1초 단위로 타이머 이벤트를 받아서 현재 시간을 출력하는 간단한 예제입니다.

Public Class Form1

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Timer1.Start()
    End Sub

    Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
        Label1.Text = Now
    End Sub
End Class


"Now"는 Date 타입으로 현재 시간을 알 수 있는 키워드입니다. 이와같이 날짜 및 시간 연산을 활용해서 주기적으로 시스템 상태를 점검하거나 타이머, 스톱워치, 알람시계와 같은 기능을 제작할 수 있습니다.


Date 타입으로 변수를 선언해서 값을 설정하는 방법은 크게 개발자가 일자 및 시간을 직접 지정하는 방법과 시스템의 현재 시간을 설정하는 방법으로 나눌 수 있는데 일자 및 시간을 직접 지정하는 방법은 아래의 예제와 같습니다.

Dim dt1 As New Date(2015, 8, 25, 11, 0, 0)
Dim dt2 As Date = #8/25/2015 11:00:00 AM#

첫번째는 클래스 생성자를 통해서 값을 설정하는 것으로 위의 예제처럼 New Date(년, 월, 일, 시, 분, 초) 뿐만아니라 Date(년, 월, 일), Date(년, 월, 일, 시, 분, 초, 밀리초) 등 다양한 형태로 시간 데이터를 선언할 수 있습니다. 두번째 예제는 시간 상수를 사용한 것으로 양쪽의 # # 문자 사이에 #월/일/년 시:분:초#의 형태로 기술할 수 있습니다.

Date 타입의 시간 데이터를 활용하는 두번째 형태는 시스템의 현재 시간을 설정하는 방법으로 아래의 코드와 같습니다.

Dim dt1 As Date = Date.Now
Dim dt2 As Date = Date.UtcNow
Dim dt3 As Date = Date.Today
Label1.Text = dt1 & Environment.NewLine & dt2 & vbCrLf & dt3

Now는 현재 일시, UtcNow는 UTC 기준시를 가져오는 것으로 한국은 기준시 +9로 아래의 실행 결과를 통해 시간 차이를 확인할 수 있습니다. Today는 오늘 일자만을 가져옵니다. 



예제 코드에 사용한 Environment.NewLine와 vbCrLf는 같은 의미로 사용할 수 있는 것이며 두가지 모두 레이블에 항목간 줄나누기를 감안해서 출력하기 위함입니다. 위의 예제에서 선언한 dt1, dt2와 같은 오브젝트에서 사용할 수 있는 속성은 아래와 같습니다. dt1.day와 같이 특정 오브젝트를 대상으로 속성을 사용하지 않고 Date.day처럼 사용하면 현재 시스템 일시를 기준으로 정보를 확인할 수 있습니다. 단, 모두 읽기 전용입니다.

  • Day : 일자
  • DayOfWeek : 요일
  • DayOfYear : 1년중 몇번째 일자인지
  • Hour : 시
  • Kind : 시간 종류(현지 시간/UTC/None)
  • Millisecond : 밀리초
  • Minute : 분
  • Month : 월
  • Second : 초
  • Ticks : Tick 카운트
  • TimeOfDay : 시간
  • Year : 년

위에서 언급한 Date의 속성들을 활용해서 일시의 각 요소를 간편하게 다룰 수 있으며 일시의 각 요소를 문자열로 표현할 경우에는 ToString() 메소드에 다음과 같은 형식 문자를 사용할 수 있습니다. 

  • d : 일
  • dd : 0 채움 일자(03, 06)
  • ddd : 요일 약자(화, 수)
  • dddd : 요일 전체(화요일)
  • M : 월
  • MM : 0 채움 월(08)
  • MMM : 월이름 약자(8)
  • MMMM : 월이름 전체(8월)
  • h : 시간
  • hh : 0 채움 시간
  • H : 시간(24시 방식)
  • HH : 0 채움 시간(24시 방식)
  • m : 분
  • mm : 0 채움 분
  • s : 초
  • ss : 0 채움 초
  • f, ff, ffff : 밀리 초
  • t : 오전/오후 표시(A, P)
  • tt : 오전/오후 표시(AM, PM)
  • y : 년도
  • yy : 두자리 년도
  • yyy, yyyy : 4자리 년도
  • z : 타임존 표시(+9)
  • zz : 0 채움 타임존 표시(+09)
  • zzz : 전체 표시 형태의 타임존 표시(+09:00)

dt1.ToString("yyyy-MM-dd HH:MM:ss")은 2015-08-25 09:10:05와 같이 출력합니다.


일시를 설정하고 출력하는 것과 더불어 아래의 코드 예제처럼 날짜 및 시간의 비교와 연산은 프로그래밍에 있어 매우 중요한 요소입니다.

        dt1 = dt1 + TimeSpan.FromDays(3)
        dt1 = dt1.AddDays(3)
        If Now - dt1 > TimeSpan.FromHours(3) Then
            MsgBox("Time is Over!")
        End If


Date 타입간에는 정수형 변수 처럼 상호 비교나 연산이 가능합니다. 그렇지만 "dt1 = dt1 + 3" 과 같은 문장은 문법 오류를 발생시킵니다. 3이 3초인지 3일리초인지 3일인지 알수 없기 때문입니다. 이런 경우에는 TimeSpan 구조체를 활용하면 편리합니다. TimeSpan 구조체에는 FromDays, FromHours, FromMilliseconds, FromMinutes, FromSeconds, FromTicks와 같은 함수로 특정한 시간 단위를 지정할 수 있습니다. 다른 타입과 같은 사칙 연산 뿐만아니라 Date 타입에 있는 AddDays, AddHours, AddMinutes, AddMonths, AddSeconds, AddYears와 같은 메소드로 날짜 및 시간 연산을 수행할 수도 있습니다. 음수 값을 넣을 수도 있으므로 다양하게 활용할 수 있습니다. Add() 메소드는 TimeSpan 구조체로 인수를 전달하며 모든 일시 연산 메소드는 Date 타입을 리턴합니다.


728x90
댓글
최근에 올라온 글
최근에 달린 댓글
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함