ios - 如何从 UIDatePicker:Time 读取值并将其转换为时间戳?
解决方案
所以首先我使用了一个 Singelton 类,这是一个只能初始化一次的类。这就是为什么您只能使用 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
推荐阅读
- php - 在 cakephp2.10 中使用 getLastInsertID 时获取 null
- ajax - csrf 令牌代码点火器 dropzone
- vue.js - 检测到重复键:“1”。这可能会导致更新错误。在 Vue 元素中
- android - 使用 Cygwin 构建 android-ndk-r17c 独立工具链
- flutter - 空置状态有什么意义?
- python - 在没有 Visual Studio 的情况下为 python 安装 MS C++ 14.0
- java - 使用 docx4j 复制多个 powerpoint 幻灯片
- oracle - 来自服务器的 SQL 加载程序 INFILE
- python - 在 Python 中按类对数据进行分组
- xml - XPath。从其他属性中提取属性值