swift - 从字符串到日期的 Swift 小时和分钟
问题描述
我试图在两个小时之间应用一些计算。
我从 Firebase 收到的字符串格式(HH:mm)的时间太长,我尝试将其转换为日期格式(HH:mm)。然后在再次转换为字符串之前应用计算并将其播种到 Firebase 中的存档中。
我的代码:
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "HH:mm"
ref.child("Experience").child(userID!).observeSingleEvent(of: .value) {(snapshot) in
if let value = snapshot.value as? [String:String]{
let value = snapshot.value as? NSDictionary
let total_time = value?["TOTAL_TIME"] as? String ?? "00:00" // Received from Firebase
self.oldDateTotalTime = dateFormatter.date(from: total_time)! //trying to convert into a Date format
print(self.oldDateTotalTime)
self.oldStringTotalTime = total_time //just for test
}
这段代码不起作用,因为我认为dateFormatter
.
我的问题是:
- 我怎样才能得到我
Date
的String
? - 我怎样才能
String
从我那里得到我的Date
?
编辑:
为了准确我的问题,我的目标是从总时间值中减去一个时间值。我有一个完整的用户体验,即 700 H 50 分钟,在 Firebase 上给出如下:700:50。在另一部分,我有一些具体的经验,即 1 小时 40 分钟,在火力基地的 1:40 之前给出。
我的要求是从全局中减去特定的经验。
700:50 - 1:40 = 699:10
在我目前的 Swift 经验中,我只使用Date()
&DateFormatter
来处理时间,我不知道如何只处理时间而不是日期......
希望您能通过我的编辑更好地理解这一点
解决方案
如果需要,这里是正则表达式代码;当然可以优化。
func stringToTime(_ timeStr: String) -> (Int, Int) {
var hours = 0
var minutes = 0
let patternH = "[0-9]*[:]" // digits, followed by :
let regexH = try! NSRegularExpression(pattern: patternH, options: .caseInsensitive)
if let matchH = regexH.firstMatch(in: timeStr, range: NSRange(0..<timeStr.utf16.count)) {
let hStr = String(timeStr[Range(matchH.range(at: 0), in: timeStr)!]).dropLast()
hours = Int(hStr) ?? 0
let patternM = "[:][0-9]{1,2}" // 1 or 2 digits
let regexM = try! NSRegularExpression(pattern: patternM, options: .caseInsensitive)
if let matchM = regexM.firstMatch(in: timeStr, range: NSRange(0..<timeStr.utf16.count)) {
let mStr = String(timeStr[Range(matchM.range(at: 0), in: timeStr)!]).dropFirst()
minutes = Int(mStr) ?? 0
}
}
return (hours, minutes)
}
let timeStr = "700:50"
let time1 = stringToTime("700:50")
let time2 = stringToTime("1:40")
var time = (time1.0 - time2.0, time1.1 - time2.1)
if time.1 < 0 {
time.1 = time.1 + 60
time.0 -= 1
}
print(time)
推荐阅读
- c# - 检测到的包降级:Microsoft.NETCore.App 从 2.1.3 到 2.1.0
- php - PHP函数中的可选参数不考虑顺序
- c++ - 从 Chrome 获取帧(简单游戏)并使用 OpenCV 显示它们
- microsoft-graph-api - Microsoft Graph 订阅过期日期时间不正确
- sql - Connect By Prior 忽略无父母的孩子
- r - 在 R 中,有没有办法使用正则表达式或类似的东西来提取电子邮件字符串的第一个和最后一个字符?
- ios - 父视图控制器扩展
- ios - 使用 Swift 4 和 Firebase 从具有唯一 ID 的多个用户读取位置
- c++ - C++11 书籍符号
- amazon-s3 - s3端点超时错误