2017-11-20 6 views
0

QuartzCoreを使用してストップウォッチの表示を00:00:00に開始する方法が見つかりません。常に07:00:00に始まります。Swiftのデフォルトの07:00:00ではなく00:00:00にelapsedTimeを開始する方法

開始時刻を00:00:00にフォーマットする方法はありますか?コードは以下のとおりです。

ありがとうございます!

クラス:以下のコメントで述べたように補正

import Foundation 
import QuartzCore 

class StopWatch: NSObject{ 

private var displayLink: CADisplayLink! 
private let formatter = DateFormatter() 

var callback: (() -> Void)? 
var elapsedTime: CFTimeInterval! 

override init() { 
    super.init() 
    self.displayLink = CADisplayLink(target: self, selector: #selector(tick(sender:))) 
    displayLink.isPaused = true 
    displayLink.add(to: RunLoop.main, forMode: RunLoopMode.commonModes) 
    self.elapsedTime = 0.0 
    formatter.dateFormat = "HH:mm:ss" 
} 
convenience init(withCallback callback: @escaping() -> Void) { 
    self.init() 
    self.callback = callback 
} 
deinit { 
    displayLink.invalidate() 
} 

func tick(sender: CADisplayLink) { 
    elapsedTime = elapsedTime + displayLink.duration 
    callback?() 
} 


func elapsedTimeAsString() -> String { 
    return formatter.string(from: Date(timeIntervalSinceReferenceDate:elapsedTime)) 
} 

} 
+2

これは、タイムゾーンの問題のように聞こえます。あなたはGMT + 7にいますか?フォーマッタのタイムゾーンをGMTに設定してみてください。 – Thilo

+0

ポインタをありがとう、それは助けた。私はformatter.timeZone = NSTimeZone(名前: "GMT")を追加しました! TimeZoneとして – Starkus

答えて

1

:上述したようコメンター 私はGMT +7に位置していますので、これはタイムゾーンの問題でした。問題を解決するために次のコードを追加しました:

formatter.timeZone = TimeZone(省略形:GMT)!

+2

ネイティブSwift構造体に 'TimeZone(略称:" GMT ")をキャストする' NS ... 'クラスを使用しないでください! – vadian

+0

ありがとう、その解決策は間違いなく良いです – Starkus

関連する問題