将日期格式化为 sql Swift 中的日期格式
Formating date to sql date formate in Swift
我有一种方法可以将我的 SQL 日期转换为 swift 中的 "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()
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
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)
}
其他人已经回答了你的问题,但有几点意见:
始终将 IS8601 时间戳字符串保存在 GMT/UTC/Zulu 时区(通过将 ISO8601 日期字符串格式化程序的 timeZone
设置为 TimeZone(secondsFromGMT: 0)
,可能是谨慎的做法也许在字符串中添加 X
限定符以使其完全明确。它不应该是“服务器时区”,也可能不应该是设备的本地时区。
更好的是,我可能建议改用 ISO8601DateFormatter
,它会自动设置时区、区域设置等,使配置不那么脆弱。
我建议实例化两个单独的日期格式化程序,一个用于 ISO 8601 日期格式(一个带有 T
),另一个用于在 UI。虽然 ISO 8601 日期格式化程序应该使用 en_US_POSIX
语言环境(如果你使用 ISO8601DateFormatter
,那是为你处理的),UI 日期格式化程序不应该(因为你可能想在用户设备的当前语言环境中显示日期)。
我个人建议您的模型对象不要使用字符串作为日期,而是使用 Date
对象。因此,在 Date
和 API 字符串之间转换时使用 ISO8601DateFormatter
,将 Date
存储在模型对象中,并且只使用 DateFormatter
和 dateStyle
和 timeStyle
在用户界面中显示 Date
时。
因此,这意味着对于两个格式化程序中的每一个,您都拥有从字符串到最新(反之亦然)的字符串到最新例程,而不是两个字符串到字符串例程。
众所周知,创建日期格式化程序的计算成本很高。所以你可以考虑一次性创建这两个formatter,保存在ivars中,以后就不用再重复实例化了。
我有一种方法可以将我的 SQL 日期转换为 swift 中的 "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()
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
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)
}
其他人已经回答了你的问题,但有几点意见:
始终将 IS8601 时间戳字符串保存在 GMT/UTC/Zulu 时区(通过将 ISO8601 日期字符串格式化程序的
timeZone
设置为TimeZone(secondsFromGMT: 0)
,可能是谨慎的做法也许在字符串中添加X
限定符以使其完全明确。它不应该是“服务器时区”,也可能不应该是设备的本地时区。更好的是,我可能建议改用
ISO8601DateFormatter
,它会自动设置时区、区域设置等,使配置不那么脆弱。我建议实例化两个单独的日期格式化程序,一个用于 ISO 8601 日期格式(一个带有
T
),另一个用于在 UI。虽然 ISO 8601 日期格式化程序应该使用en_US_POSIX
语言环境(如果你使用ISO8601DateFormatter
,那是为你处理的),UI 日期格式化程序不应该(因为你可能想在用户设备的当前语言环境中显示日期)。我个人建议您的模型对象不要使用字符串作为日期,而是使用
Date
对象。因此,在Date
和 API 字符串之间转换时使用ISO8601DateFormatter
,将Date
存储在模型对象中,并且只使用DateFormatter
和dateStyle
和timeStyle
在用户界面中显示Date
时。因此,这意味着对于两个格式化程序中的每一个,您都拥有从字符串到最新(反之亦然)的字符串到最新例程,而不是两个字符串到字符串例程。
众所周知,创建日期格式化程序的计算成本很高。所以你可以考虑一次性创建这两个formatter,保存在ivars中,以后就不用再重复实例化了。