如何从UIDatePicker:Time读取值并将其转换为时间戳?



这是我的时间选择器的样子:
时间选择器

如何读取用户选择的时间并将其转换为时间戳,以便能够对其进行一些计算?

首先我使用Singelton Class,这是一个只能初始化一次的类。这就是为什么您只能访问日期格式

DateFormat.shared.

所以这是为了计算:

import Foundation
class DateFormat {
static let shared = DateFormat()
// Date Formatters
let dateFormatterGetFullTimeAndDate: DateFormatter = {
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
formatter.locale = Locale(identifier: "de_DE") as Locale
print("DATE: (Date())")
return formatter
}()
let dateFormatterGetOnlyDate: DateFormatter = {
let formatter = DateFormatter()
formatter.locale = Locale(identifier: "de_DE") as Locale
formatter.dateFormat = "yyyy.MM.dd"
return formatter
}()
let dateFormatterGetOnlyTime: DateFormatter = {
let formatter = DateFormatter()
formatter.locale = Locale(identifier: "de_DE") as Locale
formatter.dateFormat = "HH:mm"
return formatter
}()
// For output in the right order use this Funktion with extension seeing below:
func revertDateStr(inputDate: Date, outputFormat: Int) -> String {
// outputFormats:
// 0: dd.MM.
// 1: dd.MM.yyyy
// 2: dd.MM.yyyy, HH:mm
// 3: yyyy-MM-dd, HH:mm:ss
// 4: HH:mm
//                print("--------------------- FUNC revertDateStr ---------------------")
let strDtm = dateFormatterGet.string(from: inputDate)
//                print("inputDate: (strDtm)")
let strDtmyyyy = strDtm[0..<4]
let strDtmMM = strDtm[5..<7]
let strDtmdd = strDtm[8..<10]
let strDtmHH = strDtm[11..<13]
let strDtmmm = strDtm[14..<16]
var outputStrDtm = ""
if outputFormat == 0 {
outputStrDtm = String(strDtmdd) + "." + String(strDtmMM) + "."
} else if outputFormat == 1 {
outputStrDtm = String(strDtmdd) + "." + String(strDtmMM) + "." + String(strDtmyyyy)
} else if outputFormat == 2 {
outputStrDtm = String(strDtmdd) + "." + String(strDtmMM) + "." + String(strDtmyyyy) + ", " + String(strDtmHH) + ":" + String(strDtmmm)
} else if outputFormat == 3 {
outputStrDtm = String(strDtmyyyy) + "-" + String(strDtmMM) + "-" + String(strDtmdd) + " " + String(strDtmHH) + ":" + String(strDtmmm) + ":" + String("00")
} else if outputFormat == 4 {
outputStrDtm = String(strDtmHH) + ":" + String(strDtmmm)
} else {
print("Choose outputFormat (0...3)")
}
//                print("outputString: (outputStrDtm)")
//                print("--------------------- END FUNC revertDateStr ---------------------")
return outputStrDtm
}
extension String {
var length: Int {
return count
}
subscript (i: Int) -> String {
return self[i ..< i + 1]
}
func substring(fromIndex: Int) -> String {
return self[min(fromIndex, length) ..< length]
}
func substring(toIndex: Int) -> String {
return self[0 ..< max(0, toIndex)]
}
subscript (r: Range<Int>) -> String {
let range = Range(uncheckedBounds: (lower: max(0, min(length, r.lowerBound)),
upper: min(length, max(0, r.upperBound))))
let start = index(startIndex, offsetBy: range.lowerBound)
let end = index(start, offsetBy: range.upperBound - range.lowerBound)
return String(self[start ..< end])
}
}

对于日期选择器,我得到了这个:

datePicker?.minuteInterval = 30
let loc = Locale(identifier: "de_DE")
self.datePicker.locale = loc
self.datePicker.addTarget(self, action: #selector(dateDidChange), for: .valueChanged)

// inside the viewDidLoad
func update(date: Date) {
datePicker.setDate(date, animated: true)
self.indexPath = indexPath
}

// inside the ViewController
@objc func dateDidChange(_ sender: UIDatePicker) {
let datePickerDate = self.datePicker.date
print(datePickerDate)
// or with protocol: delegate?.didChangeDate(date: sender.date)
}

微积分是用以下方法完成的:

let event = Date()
let laterEvent = event.addingTimeInterval(60 * 60) // One hour added

最新更新