我从服务器获取日期字符串,如“2017-08-05T00:30:00.000 + 02:00”。下面是我的日期格式化代码。
let dateFormatter: DateFormatter = DateFormatter()
let serverDateString = "2017-08-05T00:30:00.000+02:00"
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZZ"
dateFormatter.locale = Foundation.Locale(identifier: "en_US_POSIX")
let currentDate: Date = dateFormatter.date(from: serverDateString)!
但它返回2017-08-04 22:30:00 +0000。哪个错了。有什么建议吗?
答案 0 :(得分:0)
yyyy-MM-dd'T'hh:mm:ss.SSSZZZZZZ
这是输入字符串的正确日期格式。以下是the Apple Document以获取更多说明。
这是我的代码:
var strInputDateString: String = "2017-08-05T00:30:00.000+02:00"
var dateFormat = DateFormatter()
dateFormat.dateFormat = "yyyy-MM-dd'T'hh:mm:ss.SSSZZZZZZ"
//Set new dateFormate
var date1: Date? = dateFormat.date(from: strInputDateString)
dateFormat.dateFormat = "dd-MM-YYYY hh:mm:ss"
// Your Desire
var strOutputDateString: String = dateFormat.string(from: date1!)
print("\(strInputDateString)")
print("\(strOutputDateString)")
<强>输出:强>
Main input String:2017-08-05T00:30:00.000+02:00
Converted String: 05-08-2017 04:00:00
目前,我尝试使用自定义转换日期格式。它给了我完美的输出。
答案 1 :(得分:0)
您的解析日期代码是正确的:2017-08-05T00:30:00.000+02:00
和2017-08-04 22:30:00 +0000
代表同一时间,只是在不同的时区。您唯一的问题是Date
实际上并未存储时区
答案 2 :(得分:0)
在Swift 3中
您可以将服务器时间字符串更改为UTC时间Date
:
let dateFormatter: DateFormatter = DateFormatter()
var serverDateString = "2017-08-05T00:30:00.000+02:00"
let index = serverDateString.index(serverDateString.startIndex, offsetBy: 19)
serverDateString = serverDateString.substring(to: index)
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
dateFormatter.timeZone = TimeZone.init(identifier: "UTC")
let currentDate: Date = dateFormatter.date(from: serverDateString)!
答案 3 :(得分:-1)
试试这个
let dateFormatter: DateFormatter = DateFormatter()
let serverDateString = "2017-08-05T00:30:00.000+02:00"
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssXXX"
dateFormatter.locale = Foundation.Locale(identifier: "en_US_POSIX")
let currentDate: Date = dateFormatter.date(from: serverDateString)!
希望这有帮助
答案 4 :(得分:-1)
答案 5 :(得分:-1)
您缺少的步骤是再次使用DateFormatter将日期格式化为字符串。在日期使用打印时,它将始终显示GMT。为了便于说明,我将TimeZone设置为柏林以匹配原始偏移量+2:00。
let dateFormatter: DateFormatter = DateFormatter()
let serverDateString = "2017-08-05T00:30:00.000+02:00"
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZZ"
// Hard set to Berlin
dateFormatter.timeZone = TimeZone(identifier: "Europe/Berlin")
let currentDate: Date = dateFormatter.date(from: serverDateString)!
// Your missing step
dateFormatter.string(from: currentDate)
请记住DateFormatters是关于:
df.date(from: String)
df.string(from: Date)