본문 바로가기

VB.NET

[샘플] Timer 를 이용한 시간차계산

반응형
질문

visual basic 질문 내공50

limh****
질문4건
질문마감률0%
질문채택률0%
2018.01.07. 22:27
조회수22
질문 1 : 매년 수능 날짜에서 오늘 날짜를 빼서 몇일남았는지 레이블에 띄우는 방법
(d-day 형식)

매년 수능 날짜에서 빼는 것이 어렵다면 올해 수능 날짜에서 오늘 날짜 빼는걸로라도 부탁드려요

질문 2 : 폼n 이 실행 되었을때 그 폼n 이 실행된지 얼마나 지났는지 시간 뜨위는 방법 
(00:00:00 로 시간 분 초 단위까지)





안녕하세요.
이번에는 Timer 를 이용한 시간차계산 방법과 특정일에 대해서 오늘까지 몇일이 남아있는지 D-Day 계산하는 방법에 대해서 간단하게 남겨보자합니다.

일단 구동화면은 아래와 같습니다.


오늘날짜는 2018/01/10 입니다.
수능이 2018/11/20 에 있다는 가정하에 남은일수가 313일 이네요.

우선 소스의 전체는 아래와 같습니다.

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
Public Class Form1
 
    Dim finalDay As String = "2018/11/20 09:00:00"
    Dim startTime As String = Date.Now.ToString()
 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
 
        Timer1.Interval = 1000
        Timer1.Start()
 
    End Sub
 
    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        Dim nowTime As String = Date.Now.ToString()
 
        Dim total, duration1, duration2 As TimeSpan
        duration1 = DateTime.Parse(nowTime).Subtract(DateTime.Parse(startTime))
        total = duration1.Add(duration2)
 
        lblTimer.Text = total.ToString()
 
        If lblDay.Text = String.Empty Then
            lblDay.Text = DateDiff(DateInterval.Day, DateTime.Now(), DateTime.Parse(finalDay)).ToString()
        End If
 
    End Sub
 
End Class
 
cs


프로젝트가 실행될때에 가장먼저 선언되는 부분이 맨위에 있는 선언문

1
2
    Dim finalDay As String = "2018/11/20 09:00:00"
    Dim startTime As String = Date.Now.ToString()
cs

입니다.

startTime 변수에 프로그램이 시작된 시간을 저장해두고 있습니다.


그리고, 이벤트 Form1_Load 는 다들 아시다시피 폼로드 이벤트 입니다.

폼이 로드될때에 가장먼저 실행이 되지요.


1
2
3
4
5
6
7
 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
 
        Timer1.Interval = 1000
        Timer1.Start()
 
    End Sub
cs


폼이 로드될때에 타이머의 Interval 을 1000 으로 1초 단위로 Tick 이 이루어지도록 선언해두고 타이머를 동작시킵니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        Dim nowTime As String = Date.Now.ToString()
 
        Dim total, duration1, duration2 As TimeSpan
        duration1 = DateTime.Parse(nowTime).Subtract(DateTime.Parse(startTime))
        total = duration1.Add(duration2)
 
        lblTimer.Text = total.ToString()
 
        If lblDay.Text = String.Empty Then
            lblDay.Text = DateDiff(DateInterval.Day, DateTime.Now(), DateTime.Parse(finalDay)).ToString()
        End If
 
    End Sub
 
cs


그리고 1초가 흐를때마다 위의 Tick 메소드가 실행되어집니다.


1초당 동작시간을 기록해두고, 프로그램 실행시간과의 시간차를 계산하여

폼의 맨 아랫쪽에 보여줍니다. (1초당 한번 갱신)


그리고, 날짜가 기록되어있지 않은경우 (초기 기동시에만) 는

현재날짜와 수능일로 지정해둔 날짜의 차이를 계산해서 화면에 보여줍니다.


전체 소스는 아래에 첨부해두겠습니다.

즐프하세요~~


timerControl.zip


반응형