Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Swift中将日期格式化为sql日期格式_Swift_Date Formatting - Fatal编程技术网

在Swift中将日期格式化为sql日期格式

在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

我有一个方法可以在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()
        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)
}