質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

1896閲覧

swift、時間による条件分岐

atusi828

総合スコア7

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2021/01/29 19:55

編集2021/01/29 19:57

前提・実現したいこと

swift5でアプリを作成しています。目的は、特定の時間になるとタイマーが作動してカウントダウンを始めるようにしたいです。条件分岐を用いて実現しようとしています。しかし、時間を指定する条件分岐の書き方がわかりません。どうすればいいでしょうか?

ソースコード
//
// ViewController.swift
// clock5
//
// Created by 吉崎敦志 on 2021/01/30.
//

import UIKit
import Foundation

let cal = Calendar(identifier: .gregorian)

let tooDate = Date(timeIntervalSinceReferenceDate: +634726800+9000)

let toDate = Date(timeIntervalSinceReferenceDate: +634726800)

let startDate = Date()

let time1 = cal.dateComponents([.second], from: startDate, to: toDate)

class ViewController: UIViewController {

@IBOutlet weak var timerLabel: UILabel! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. timerLabel.text = "" Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(ViewController.timerCounter), userInfo: nil, repeats: true) } @objc func timerCounter(){ if 1 > 0 { timerLabel.text = TimerFunction(setDate: toDate) } } func TimerFunction(setDate: Date) -> String { var nowDate = Date() let calendar = Calendar(identifier: .japanese) let timeValue = calendar .dateComponents([.day, .hour, .minute, .second], from: nowDate, to: setDate) return String(format: "残り"+"%02d時間:%02d分:%02d秒", timeValue.hour!, timeValue.minute!, timeValue.second!) }

}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2021/01/29 23:21

目的の時間になった時に、端末がスリープ中だったり、他のアプリが起動していたらどうしますか?
guest

回答1

0

ベストアンサー

時間の条件分岐ですが、Date型であれば普通に比較演算子が使えます。
例えば、2021/1/30 17:50:00以降に表示を開始したい場合は、次のように書きます。

Swift

1 @objc func timerCounter(){ 2 // 現在の日付を得る 3 let now = Date() 4 // タイマー起動時間を設定する 5 var calendar = Calendar(identifier: .gregorian) 6 calendar.timeZone = .current 7 calendar.locale = .current 8 let condition = calendar.date(from: DateComponents(year: 2021, month: 1, day: 30, hour: 17, minute: 50, second: 00))! 9 10 // 所定の起動時間になったら表示を開始する 11 if now > condition { 12 timerLabel.text = TimerFunction(setDate: toDate) 13 } 14 }

Calendarのidentifierに.gregorianを指定しているところに注意して下さい。
もしこれを.japaneseとした場合は、calendar.dateのところのyearの指定が和暦になるため、2021年を指定すると、令和2021年=西暦4039年と解釈されてしまいます。

timeZoneとlocaleは設定しなくても動作しますが、この部分の設定を統一しておいたほうが好ましいため設定しています。

なお、このコードは指定の時間になったらタイマーを表示するものです。もともとの質問には、「カウントダウンを始める」とありましたが、その処理は質問内容とは異なるため省略しています。

投稿2021/01/30 08:54

TokyoYoshida

総合スコア20

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

atusi828

2021/01/30 22:58

解説とソースコードありがとうございました。 また、動けばいいという段階からより望ましいプログラムをかけるようになる為のアドバイスが参考になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問