在 iphone 中找不到正确的日期格式化程序 (DateFormatter)
Can't find the right date formatter (DateFormatter) in iphone
我正在从服务器获取日期字符串,例如“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)!
但它 returns 2017-08-04 22:30:00 +0000。这是错误的。有什么建议吗?
试试这个
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)!
希望对您有所帮助
其实你的代码不错。
我复制了你的数据并 运行 它在操场上。
你想要什么样的格式?
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
目前,我尝试将您的日期格式转换为我的习惯。它给了我完美的输出。
你的日期解析代码是正确的:2017-08-05T00:30:00.000+02:00
和2017-08-04 22:30:00 +0000
代表相同的时间,只是在不同的时区。您唯一的问题是 Date
实际上没有存储时区
您缺少的步骤是再次使用 DateFormatter 将日期格式化为字符串。当您在日期上使用 print 时,它将始终显示 GMT。出于说明目的,我将时区设置为柏林以匹配 +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)
在Swift3
您可以将服务器时间字符串更改为 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)!
我正在从服务器获取日期字符串,例如“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)!
但它 returns 2017-08-04 22:30:00 +0000。这是错误的。有什么建议吗?
试试这个
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)!
希望对您有所帮助
其实你的代码不错。 我复制了你的数据并 运行 它在操场上。 你想要什么样的格式?
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
目前,我尝试将您的日期格式转换为我的习惯。它给了我完美的输出。
你的日期解析代码是正确的:2017-08-05T00:30:00.000+02:00
和2017-08-04 22:30:00 +0000
代表相同的时间,只是在不同的时区。您唯一的问题是 Date
实际上没有存储时区
您缺少的步骤是再次使用 DateFormatter 将日期格式化为字符串。当您在日期上使用 print 时,它将始终显示 GMT。出于说明目的,我将时区设置为柏林以匹配 +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)
在Swift3
您可以将服务器时间字符串更改为 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)!