인프런 커뮤니티 질문&답변

cjg4970님의 프로필 이미지
cjg4970

작성한 질문수

iOS12 앱 개발 퍼펙트 가이드

Stop Watch 질문

작성

·

266

0

Stop Watch 강의도중 시간, 분, 초를 출력해보고 싶어서 코드를 짯습니다.

근데 start 버튼을 누르면 바로 hour부분이 09가 됩니다. 

코드입니다.

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var labelHour: UILabel!

    @IBOutlet weak var labelMinute: UILabel!

    @IBOutlet weak var labelSecond: UILabel!

    @IBOutlet weak var startStopButton: UIButton!

    @IBOutlet weak var resetButton: UIButton!

    

    var isStart = false

    var timer = Timer()

    var startTime = 0.0

    var elapsed = 0.0

    

    @IBAction func startStop(_ sender: Any) {

        if isStart{

            startStopButton.setTitle("Start", for: .normal)

            timer.invalidate()

        }else{

            startStopButton.setTitle("Stop", for: .normal)

            startTime = Date().timeIntervalSince1970 - elapsed

            timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(updateTime), userInfo: nil, repeats: true)

        }

        isStart.toggle()

    }

    @IBAction func reset(_ sender: Any) {

        labelHour.text = "00"

        labelMinute.text = "00"

        labelSecond.text = "00"

        

        elapsed = 0.0

        startTime = Date().timeIntervalSince1970 - elapsed

        startStopButton.setTitle("Start", for: .normal)

        timer.invalidate()

        isStart.toggle()

    }

    

    

    override func viewDidLoad() {

        super.viewDidLoad()

        

        labelHour.text = "00"

        labelMinute.text = "00"

        labelSecond.text = "00"

        startStopButton.setTitle("Start", for: .normal)

        resetButton.setTitle("Reset", for: .normal)

    }

    

    @objc func updateTime(){

        elapsed = Date().timeIntervalSince1970 - startTime

        let df = DateFormatter()

        let date = Date(timeIntervalSince1970: elapsed)

        

        df.dateFormat = "HH"

        labelHour.text = df.string(from: date)

        

        df.dateFormat = "mm"

        labelMinute.text = df.string(from: date)

        

        df.dateFormat = "ss"

        labelSecond.text = df.string(from: date)

    }

}

아래 사진은 5분 28초 경과 사진입니다.

답변 2

1

iOS Developer - 이정님의 프로필 이미지
iOS Developer - 이정
지식공유자

안녕하세요.

한국의 timezone이 자동으로 잡혀 있어서 표준시간 +9가 되어 있는 상태 입니다. (나라마다 +- 되는 시간이 다르답니다.)

그래서 9시간이 더 잡혀있어서

아래와 같이 DateFormatter의 타임존 값을 0으로 만들어 놓아야 합니다.

그러면 0으로 나오는걸 확인할 수 있으실 겁니다.

df.timeZone = TimeZone(secondsFromGMT: 0)

0

cjg4970님의 프로필 이미지
cjg4970
질문자

문제해결했습니다. 답변 감사합니다:)

cjg4970님의 프로필 이미지
cjg4970

작성한 질문수

질문하기