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

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

2回答

1666閲覧

datepickerからdouble型で取り出し、現在時刻と比較したい

退会済みユーザー

退会済みユーザー

総合スコア0

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クリップ

投稿2017/08/09 13:40

編集2017/08/18 07:12

swift3

1import UIKit 2 3class ViewController: UIViewController, UIToolbarDelegate { 4 5 6 7 @IBOutlet weak var getUpTimeTextField: UITextField! 8 var getUpTimeToolBar:UIToolbar! 9 var getUpTimeDatePicker: UIDatePicker! 10 11 override func viewDidLoad() { 12 super.viewDidLoad() 13 // 入力欄の設定 14 getUpTimeTextField.placeholder = dateToString(date: Date()) //<-`dateToString`のパラメータは`Date`型なので最初から`Date()`を渡す 15 getUpTimeTextField.text = dateToString(date: Date()) //<-同上 16 self.view.addSubview(getUpTimeTextField) 17 18 // UIDatePickerの設定 19 getUpTimeDatePicker = UIDatePicker() 20 getUpTimeDatePicker.addTarget(self, action: #selector(changedDateEvent), for: UIControlEvents.valueChanged) 21 getUpTimeDatePicker.datePickerMode = UIDatePickerMode.time 22 getUpTimeTextField.inputView = getUpTimeDatePicker 23 24 // UIToolBarの設定 25 getUpTimeToolBar = UIToolbar(frame: CGRect(x: 0, y: self.view.frame.size.height/6, width: self.view.frame.size.width, height: 40.0)) 26 27 getUpTimeToolBar.layer.position = CGPoint(x: self.view.frame.size.width/2, y: self.view.frame.size.height-20.0) 28 getUpTimeToolBar.barStyle = .blackTranslucent 29 getUpTimeToolBar.tintColor = UIColor.white 30 getUpTimeToolBar.backgroundColor = UIColor.gray 31 32 let toolBarBtn = UIBarButtonItem(title: "完了", style: .plain, target: self, action: #selector(tappedToolBarBtn)) 33 34 getUpTimeToolBar.items = [toolBarBtn] 35 getUpTimeTextField.inputAccessoryView = getUpTimeToolBar 36 } 37 38 override func didReceiveMemoryWarning() { 39 super.didReceiveMemoryWarning() 40 } 41 42 // 「完了」を押すと閉じる 43 func tappedToolBarBtn(_ sender: UIBarButtonItem) { 44 getUpTimeTextField.resignFirstResponder() 45 } 46 47 func changedDateEvent(_ sender: UIDatePicker){ //<- `UIDatePicker`からのactionの`sender`は必ず`UIDatePicker`になる 48 //`sender`を直接`UIDatePicker`として使えばいいのでキャストは不要 49 self.changeLabelDate(date: sender.date) 50 } 51 52 func changeLabelDate(date: Date) { //<- `NSDate`を使っているところは全て`Date`に置き換える 53 getUpTimeTextField.text = self.dateToString(date: date) 54 } 55 56 func dateToString(date: Date) -> String { 57 //DateFormatterは参照型なので、letが適切 58 let date_formatter = DateFormatter() 59 //曜日の1文字表記をしたいならweekdaysなんて配列はいらない 60 61 date_formatter.locale = Locale(identifier: "ja") 62 date_formatter.dateFormat = "hh時間mm分 " 63 return date_formatter.string(from: date as Date) 64 } 65}

datepickerから現在時刻と比較してアラームを鳴らすようにしたいのですが、dateToStringの関数のどこをどう変えればいいのかご教授ください。

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

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

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

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

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

guest

回答2

0

「double型」というのがUNIX時間のことであれば、Date型の.timeIntervalSince1970プロパティで取得できますが、加減算や比較はDate型のままでも出来ます。

swift

1let now = Date() //現在時間 2print(now, now.timeIntervalSince1970) 3//=> 2017-08-10 00:48:48 +0000 1502326128.82842 4 5let base = now - 10000 //10000秒前 6print(base, base.timeIntervalSince1970) 7//=> 2017-08-09 22:02:08 +0000 1502316128.82842 8 9if now > base { 10 let passed = Int(now.timeIntervalSince1970 - base.timeIntervalSince1970) 11 let hours = passed / 3600 12 let minutes = (passed % 3600) / 60 13 let seconds = (passed % 60) 14 print(hours, "hours", minutes, "minutes", seconds, "seconds passed.") 15 //=> 2 hours 46 minutes 40 seconds passed. 16}

投稿2017/08/10 00:52

fuzzball

総合スコア16731

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

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

0

時刻と比較するためにDoubleで取り出す理由がわかりません。
UIDatePickerからDateが取れます。

AppleのUIDatePickerのリファレンス

投稿2017/08/09 14:21

MasakiHori

総合スコア3384

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

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

退会済みユーザー

退会済みユーザー

2017/08/10 00:04

dateは何型ですか?? 整数を足せるようにしたいのですが、
YokemuraTakeshi

2017/08/21 05:08

要はこういうことをおっしゃっているのでは func changedDateEvent(_ sender: UIDatePicker){ // 現在時刻との差分を取る。timeIntervalSinceNowの返り値はTimeInterval (Doubleの別名)です let interval = sender.date.timeIntervalSinceNow // 差分を使って何か処理 doSomethingWithTimeInterval(interval) // ラベル更新処理 self.changeLabelDate(date: sender.date) }
YokemuraTakeshi

2017/08/21 05:23

続けてすみません。「現在時刻と比較してアラームを鳴らす」とのことですが、ここのロジックはどのように実装される予定でしょうか?
退会済みユーザー

退会済みユーザー

2017/08/24 08:21

そうです、ありがとうございます。差が0になったらアラームを鳴らす予定です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問