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

How to read values from UIDatePicker:Time and convert it into timestamp?

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

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

所以首先我使用 Singelton Class,这是一个 class,它只能初始化一次。这就是为什么您只能通过

访问 DateFormat
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,我得到了这个:

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