如何使用 Swift 从 JSON 字符串中获取时间?
How to get time from JSON string using Swift?
我从头开始尝试并浏览了。可能这个问题已经被问过很多次了。我根据 timezone 解析了城市(例如:Mar del Plata)的天气响应。我想要 HH:mm 格式的时间。以下是示例 JSON 响应。
"sunrise": "2016-07-10T08:05:02-0300", "sunset": "2016-07-10T17:46:29-0300"
我的代码:
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZ"
dateFormatter.timeZone = NSTimeZone(forSecondsFromGMT: 0)
guard let date = dateFormatter.dateFromString(dateString) else {
assert(false, "no date from string")
}
dateFormatter.dateFormat = "HH:mm"
//dateFormatter.timeZone = NSTimeZone(name: "UTC")
return dateFormatter.stringFromDate(date)
每当我在标签中打印或显示日期字符串时,时间就会发生变化。我想要准确的响应时间。
以上我的临时解决办法是
// Begin - Its a temperory solution
if dateString.contains("T") {
print("dateString.contains(T)")
let myArray = dateString.componentsSeparatedByString("T")
if myArray.count > 0 {
let str = myArray[1]
if str.contains("+") {
print("(str.contains(+))")
let myArr = str.componentsSeparatedByString("+")
if myArr.count > 0 {
let str1 = myArr[0]
if str1.contains(":") {
print("str1.contains(:)")
let myAr = str1.componentsSeparatedByString(":")
if myAr.count > 0 {
let str2 = myAr[0]
let str3 = myAr[1]
let str4 = "\(str2):\(str3)"
print(str4)
return str4
}
//print(myAr)
}
}
}
if str.contains("-") {
print("(str.contains(-))")
let myArr = str.componentsSeparatedByString("-")
if myArr.count > 0 {
let str1 = myArr[0]
if str1.contains(":") {
print("str1.contains(:)")
let myAr = str1.componentsSeparatedByString(":")
if myAr.count > 0 {
let str2 = myAr[0]
let str3 = myAr[1]
let str4 = "\(str2):\(str3)"
print(str4)
return str4
}
//print(myAr)
}
}
}
}
}
// End - Its a temporary solution
我想要一个更好的解决方案而不是我的临时解决方案。
编辑 1:
正如我提到的,我希望通过丢弃时区来同时进入 JSON 响应。
请建议我并指导我将来如何处理时区。希望你们明白,我在做什么。抱歉我的英语不好。
提前致谢。
试试下面的代码行。希望对你有所帮助...
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZ"
dateFormatter.timeZone = NSTimeZone.systemTimeZone()
guard let date = dateFormatter.dateFromString(dateString)
else {
assert(false, "no date from string")
}
dateFormatter.dateFormat = "HH:mm"
return dateFormatter.stringFromDate(date)
如果您绝对不关心时区,您可以简单地trim关闭它:
let sunrise = "2016-07-10T08:05:02-0300"
let sunriseNoTimezone = sunrise.substringToIndex(sunrise.endIndex.advancedBy(-5))
let formatter = NSDateFormatter()
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
formatter.timeZone = NSTimeZone(forSecondsFromGMT: 0)
let date = formatter.dateFromString(sunriseNoTimezone)
print(date)
我从头开始尝试并浏览了。可能这个问题已经被问过很多次了。我根据 timezone 解析了城市(例如:Mar del Plata)的天气响应。我想要 HH:mm 格式的时间。以下是示例 JSON 响应。
"sunrise": "2016-07-10T08:05:02-0300", "sunset": "2016-07-10T17:46:29-0300"
我的代码:
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZ"
dateFormatter.timeZone = NSTimeZone(forSecondsFromGMT: 0)
guard let date = dateFormatter.dateFromString(dateString) else {
assert(false, "no date from string")
}
dateFormatter.dateFormat = "HH:mm"
//dateFormatter.timeZone = NSTimeZone(name: "UTC")
return dateFormatter.stringFromDate(date)
每当我在标签中打印或显示日期字符串时,时间就会发生变化。我想要准确的响应时间。
以上我的临时解决办法是
// Begin - Its a temperory solution
if dateString.contains("T") {
print("dateString.contains(T)")
let myArray = dateString.componentsSeparatedByString("T")
if myArray.count > 0 {
let str = myArray[1]
if str.contains("+") {
print("(str.contains(+))")
let myArr = str.componentsSeparatedByString("+")
if myArr.count > 0 {
let str1 = myArr[0]
if str1.contains(":") {
print("str1.contains(:)")
let myAr = str1.componentsSeparatedByString(":")
if myAr.count > 0 {
let str2 = myAr[0]
let str3 = myAr[1]
let str4 = "\(str2):\(str3)"
print(str4)
return str4
}
//print(myAr)
}
}
}
if str.contains("-") {
print("(str.contains(-))")
let myArr = str.componentsSeparatedByString("-")
if myArr.count > 0 {
let str1 = myArr[0]
if str1.contains(":") {
print("str1.contains(:)")
let myAr = str1.componentsSeparatedByString(":")
if myAr.count > 0 {
let str2 = myAr[0]
let str3 = myAr[1]
let str4 = "\(str2):\(str3)"
print(str4)
return str4
}
//print(myAr)
}
}
}
}
}
// End - Its a temporary solution
我想要一个更好的解决方案而不是我的临时解决方案。
编辑 1: 正如我提到的,我希望通过丢弃时区来同时进入 JSON 响应。
请建议我并指导我将来如何处理时区。希望你们明白,我在做什么。抱歉我的英语不好。
提前致谢。
试试下面的代码行。希望对你有所帮助...
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZ"
dateFormatter.timeZone = NSTimeZone.systemTimeZone()
guard let date = dateFormatter.dateFromString(dateString)
else {
assert(false, "no date from string")
}
dateFormatter.dateFormat = "HH:mm"
return dateFormatter.stringFromDate(date)
如果您绝对不关心时区,您可以简单地trim关闭它:
let sunrise = "2016-07-10T08:05:02-0300"
let sunriseNoTimezone = sunrise.substringToIndex(sunrise.endIndex.advancedBy(-5))
let formatter = NSDateFormatter()
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
formatter.timeZone = NSTimeZone(forSecondsFromGMT: 0)
let date = formatter.dateFromString(sunriseNoTimezone)
print(date)