Swift MMM dd,yyyy hh:mm:ss a的正确日期格式是什么?以及如何转换为dd-mm-yyy-HH:ii

Swift MMM dd,yyyy hh:mm:ss a的正确日期格式是什么?以及如何转换为dd-mm-yyy-HH:ii,swift,date,nsdateformatter,dateformatter,Swift,Date,Nsdateformatter,Dateformatter,我想将此:2017年12月31日8:00:00 PM转换为Swift 4中的dd-mm-yyyy HH:ii格式 这是我目前的代码: let dateFormatter = DateFormatter() dateFormatter.dateFormat = "MMM dd, yyyy hh:mm:ss a"//this your string date format if let translatedDate = dateFormatter.date(from: dateti

我想将此:2017年12月31日8:00:00 PM转换为Swift 4中的dd-mm-yyyy HH:ii格式

这是我目前的代码:

let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "MMM dd, yyyy hh:mm:ss a"//this your string date format

    if let translatedDate = dateFormatter.date(from: datetime) {
        dateFormatter.dateFormat = "dd-MM-yyyy HH:ii"
        return dateFormatter.string(from: translatedDate)
    }
该代码从不输入if语句。我想我的日期格式不正确。

一种在日期及其文本表示之间转换的格式

您可以找到更多
Locale
标识符

  • 首先,将日期转换为本地时区。使用
    区域设置
  • 之后,您可以将日期转换为特定格式
然后试试这个代码

let dateStr = "Wed, 26 Jul 2017 18:10:02 +0530"
if let date = Date(fromString: dateStr, format: "MMM dd, yyyy hh:mm:ss a") {
        debugPrint(date.toString(format: "dd-MM-yyyy HH:ii"))
}
日期扩展是…

extension Date {

    // Initializes Date from string and format
    public init?(fromString string: String, format: String, identifier: String = Locale.current.identifier) {
        let formatter = DateFormatter()
        formatter.dateFormat = format
        formatter.locale = Locale(identifier: identifier)
        if let date = formatter.date(from: string) {
            self = date
        } else {
            return nil
        }
    }

    // Converts Date to String, with format
    public func toString(format: String, identifier: String = Locale.current.identifier) -> String {
        let formatter = DateFormatter()
        formatter.locale = Locale(identifier: identifier)
        formatter.dateFormat = format
        return formatter.string(from: self)
    }
}
extension String {
    // Converts String to formated date string, with inputFormat and outputFormat
    public func toDate(form inputFormat: String, to outputFormat: String, identifier: String = Locale.current.identifier) -> String? {
        return Date(fromString: self, format: inputFormat, identifier: identifier)?.toString(format: outputFormat, identifier: identifier)
    }

    // Converts String to Date, with format
    func toDate(format: String, identifier: String = Locale.current.identifier) -> Date? {
        return Date(fromString: self, format: format, identifier: identifier)
    }
}
字符串扩展名是…

extension Date {

    // Initializes Date from string and format
    public init?(fromString string: String, format: String, identifier: String = Locale.current.identifier) {
        let formatter = DateFormatter()
        formatter.dateFormat = format
        formatter.locale = Locale(identifier: identifier)
        if let date = formatter.date(from: string) {
            self = date
        } else {
            return nil
        }
    }

    // Converts Date to String, with format
    public func toString(format: String, identifier: String = Locale.current.identifier) -> String {
        let formatter = DateFormatter()
        formatter.locale = Locale(identifier: identifier)
        formatter.dateFormat = format
        return formatter.string(from: self)
    }
}
extension String {
    // Converts String to formated date string, with inputFormat and outputFormat
    public func toDate(form inputFormat: String, to outputFormat: String, identifier: String = Locale.current.identifier) -> String? {
        return Date(fromString: self, format: inputFormat, identifier: identifier)?.toString(format: outputFormat, identifier: identifier)
    }

    // Converts String to Date, with format
    func toDate(format: String, identifier: String = Locale.current.identifier) -> Date? {
        return Date(fromString: self, format: format, identifier: identifier)
    }
}
在日期及其文本表示形式之间进行转换的语言

您可以找到更多
Locale
标识符

  • 首先,将日期转换为本地时区。使用
    区域设置
  • 之后,您可以将日期转换为特定格式
然后试试这个代码

let dateStr = "Wed, 26 Jul 2017 18:10:02 +0530"
if let date = Date(fromString: dateStr, format: "MMM dd, yyyy hh:mm:ss a") {
        debugPrint(date.toString(format: "dd-MM-yyyy HH:ii"))
}
日期扩展是…

extension Date {

    // Initializes Date from string and format
    public init?(fromString string: String, format: String, identifier: String = Locale.current.identifier) {
        let formatter = DateFormatter()
        formatter.dateFormat = format
        formatter.locale = Locale(identifier: identifier)
        if let date = formatter.date(from: string) {
            self = date
        } else {
            return nil
        }
    }

    // Converts Date to String, with format
    public func toString(format: String, identifier: String = Locale.current.identifier) -> String {
        let formatter = DateFormatter()
        formatter.locale = Locale(identifier: identifier)
        formatter.dateFormat = format
        return formatter.string(from: self)
    }
}
extension String {
    // Converts String to formated date string, with inputFormat and outputFormat
    public func toDate(form inputFormat: String, to outputFormat: String, identifier: String = Locale.current.identifier) -> String? {
        return Date(fromString: self, format: inputFormat, identifier: identifier)?.toString(format: outputFormat, identifier: identifier)
    }

    // Converts String to Date, with format
    func toDate(format: String, identifier: String = Locale.current.identifier) -> Date? {
        return Date(fromString: self, format: format, identifier: identifier)
    }
}
字符串扩展名是…

extension Date {

    // Initializes Date from string and format
    public init?(fromString string: String, format: String, identifier: String = Locale.current.identifier) {
        let formatter = DateFormatter()
        formatter.dateFormat = format
        formatter.locale = Locale(identifier: identifier)
        if let date = formatter.date(from: string) {
            self = date
        } else {
            return nil
        }
    }

    // Converts Date to String, with format
    public func toString(format: String, identifier: String = Locale.current.identifier) -> String {
        let formatter = DateFormatter()
        formatter.locale = Locale(identifier: identifier)
        formatter.dateFormat = format
        return formatter.string(from: self)
    }
}
extension String {
    // Converts String to formated date string, with inputFormat and outputFormat
    public func toDate(form inputFormat: String, to outputFormat: String, identifier: String = Locale.current.identifier) -> String? {
        return Date(fromString: self, format: inputFormat, identifier: identifier)?.toString(format: outputFormat, identifier: identifier)
    }

    // Converts String to Date, with format
    func toDate(format: String, identifier: String = Locale.current.identifier) -> Date? {
        return Date(fromString: self, format: format, identifier: identifier)
    }
}

看来
translateDate
是零,我在操场上试过了,没问题。那么,当地的问题是什么?否则,我不知道格式()中的
ii
,我不知道您想用它做什么,所以如果您通过
if let
测试,我认为
dateFormatter.string(from:translatedDate)
将不是您想要的。可能是另一个“set
dateFormatter.locale=locale(标识符:“en_US_POSIX”)
”问题,比较或–但是
ii
代表什么?
8
将不匹配
hh
,因为
hh
需要两位数字(所以
08
)。请尝试使用单个
h
。您的代码很好:
let datetime=“2017年12月31日8:00:00 PM”let dateFormatter=dateFormatter()dateFormatter.dateFormat=“MMM dd,yyyyy hh:mm:ss a”dateFormatter.locale=locale(标识符:“en_US_POSIX”),如果let translatedDate=dateFormatter.date(from:datetime){dateFormatter.dateFormat=“dd-MM-yyyy HH:MM”让结果=dateFormatter.string(from:translatedDate)打印(结果)//31-12-2017 20:00}
无论如何,我认为
ii
是一个mistake@Cyrille:不,
h
匹配从1到12的任何时间。似乎
translatedDate
为零,我在操场上尝试过,没有问题。因此,本地问题?否则,我没有格式(),我不知道你想用它做什么,所以如果你通过了
if let
测试,我不认为
dateFormatter.string(from:translatedDate)
将是你想要的。可能另一个“set
dateFormatter.locale=locale(标识符:“en_US\u POSIX”)
“发布、比较或–但是
ii
代表什么?
8
将不匹配
hh
,因为
hh
需要两位数字(所以
08
)。请尝试使用单个
h
。您的代码很好:
let datetime=“2017年12月31日8:00:00 PM”let dateFormatter=dateFormatter()dateFormatter.dateFormat=“MMM dd,yyyyy hh:mm:ss a”dateFormatter.locale=locale(标识符:“en_US_POSIX”),如果let translatedDate=dateFormatter.date(from:datetime){dateFormatter.dateFormat=“dd-MM-yyyy HH:MM”让结果=dateFormatter.string(from:translatedDate)打印(结果)//31-12-2017 20:00}
无论如何,我认为
ii
是一个mistake@Cyrille:否,
h
匹配1到12之间的任何小时。对于接受日期格式作为输入参数的函数,强制展开日期格式设置程序的输出是一个坏主意。如果其中一种格式错误,请使函数可丢弃或返回
nil
。此外,如果硬编码区域设置,将其设置为
en_US\u POSIX
,而不是
en_US
。在接受日期格式作为输入参数的函数中,强制展开日期格式设置器的输出是一个坏主意。如果任何一种格式错误,请将函数设置为可丢弃或返回
nil
。此外,如果要硬编码区域设置,请进行设置到
en_US\u POSIX
,而不是
en_US