在Swift中将日期格式化为sql日期格式
我有一个方法可以在swift中将我的SQL日期转换为MM dd yyyy,HH:MM。我需要能够转换回yyyy-MM-dd'T'HH:MM:ss。这将在服务器时间和东部时区 转换为MM dd yyyy,HH:MM:在Swift中将日期格式化为sql日期格式,swift,date-formatting,Swift,Date Formatting,我有一个方法可以在swift中将我的SQL日期转换为MM dd yyyy,HH:MM。我需要能够转换回yyyy-MM-dd'T'HH:MM:ss。这将在服务器时间和东部时区 转换为MM dd yyyy,HH:MM: static func dateView(_ DateString: String) -> String { var returnDate = "" let dateFormatter = DateFormatter() da
static func dateView(_ DateString: String) -> String {
var returnDate = ""
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
let string = String(DateString)
if let date = dateFormatter.date(from: string) {
dateFormatter.dateStyle = .short
dateFormatter.timeStyle = .short
returnDate = dateFormatter.string(from: date)
}
return returnDate
}
正在尝试转换为yyyy-MM-dd'T'HH:MM:ss:
static func dateToSQLDate(_ DateString: String) -> String {
var returnDate = ""
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "MM/dd/yy HH:mm"
let string = String(DateString)
if let date = dateFormatter.date(from: string) {
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
//dateFormatter.timeStyle = .short
returnDate = dateFormatter.string(from: date)
}
return returnDate
}
例如:
var date = "3/10/16, 10:00AM"
dateToSQLDate(date)
Expected Out: 2016-03-10T10:00:00
你知道我做错了什么吗?试试这个
static func dateToSQLDate(_ DateString: String) -> String {
var returnDate = ""
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
let string = String(DateString)
if let date = dateFormatter.date(from: string) {
dateFormatter.dateFormat = "MM/dd/yy HH:mm"
returnDate = dateFormatter.string(from: date)
}
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
return returnDate
}
您的日期格式错误 将字符串3/10/16,10:00AM与日期格式MM/dd/yy HH:MM进行比较。有三个问题: 逗号不见了 缺少AM/PM说明符a 12小时模式为hh
其他人回答了您的问题,但有几点意见: 通过将ISO8601日期字符串格式化程序的时区设置为TimeZonesecondsFromGMT:0,或者在字符串中添加X限定符以使其完全明确,可能会谨慎地将IS8601时间戳字符串保存为GMT/UTC/Zulu时区。它不应该是“服务器时区”,也可能不应该是设备的本地时区 更好的是,我可能建议改用ISO8601DateFormatter,它可以自动设置时区、区域设置等,从而降低配置的脆弱性 我建议实例化两个单独的日期格式化程序,一个用于ISO8601日期格式,一个带有T,另一个用于在UI中显示日期。虽然ISO 8601日期格式化程序应该使用en_US_POSIX语言环境,如果您使用ISO8601DateFormatter,这已经为您解决了,但UI日期格式化程序不应该这样做,因为您可能希望在用户设备的当前语言环境中显示日期 我个人建议您的模型对象不使用日期字符串,而是使用日期对象。因此,在日期和API字符串之间转换时使用ISO8601DateFormatter,将日期存储在模型对象中,并且在用户界面中显示日期时仅使用dateStyle和timeStyle的DateFormatter 这意味着,对于两个格式化程序中的每一个,您都有字符串到日期,而不是两个字符串到字符串的例程,反之亦然 众所周知,创建日期格式化程序的计算成本非常高。因此,您可能会考虑一次创建这两个格式化程序,将它们保存在IVAR中,然后不必重复地重新初始化它们。
同时添加一个示例。MM-dd-yyyy,HH:MM!=MM/dd/yy HH:MM原始字符串的时区是什么?是当地时间、UTC时间还是服务器时间?将是服务器时间。编辑您的帖子并将其添加到您的问题中,以及它对应的时区
static func dateToSQLDate(_ string: String) -> String {
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "MM/dd/yy, hh:mma"
guard let date = dateFormatter.date(from: string) else { return "" }
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
return dateFormatter.string(from: date)
}