Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.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/8/swift/19.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
Ios 将日期转换为格式日、日、月、年_Ios_Swift_Nsdateformatter - Fatal编程技术网

Ios 将日期转换为格式日、日、月、年

Ios 将日期转换为格式日、日、月、年,ios,swift,nsdateformatter,Ios,Swift,Nsdateformatter,我正在尝试将日期字符串从yyyy-MM-dd'T'HH:MM:ss.SSS'Z'转换为“day,date-month-year”,类似于“2018年1月1日星期一” 我正在使用我的helper函数将日期字符串从一种格式转换为另一种格式。在下面的函数中,我不确定需要将的哪些参数传递给: func convertDate(from inputFormat: String, to outputFormat: String) -> String { let dateFormatter =

我正在尝试将日期字符串从
yyyy-MM-dd'T'HH:MM:ss.SSS'Z'
转换为“day,date-month-year”,类似于“2018年1月1日星期一”

我正在使用我的helper函数将日期字符串从一种格式转换为另一种格式。在下面的函数中,我不确定需要将
的哪些参数传递给

func convertDate(from inputFormat: String, to outputFormat: String) -> String {
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = inputFormat
    if let dateInLocal = dateFormatter.date(from: self) {
        dateFormatter.dateFormat = outputFormat
        dateFormatter.amSymbol = "AM"
        dateFormatter.pmSymbol = "PM"
        return dateFormatter.string(from: dateInLocal)
    }
    return "NA"
}
使用上面的扩展,如下所示

dateAndName = date.convertDate(from:"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", to: "")

有关日期格式,请参阅文档

EEEE
给出了完整的工作日名称。
MMMM
给出了完整的月份名称。
dd
给出一个两位数的月数。
yyyy
给出了一个四位数的年份号

不要在输入格式中引用
Z
。日期字符串中的
Z
表示日期字符串的时区。如果在日期格式中引用
Z
,则字符串中的
Z
基本上被忽略,作为时区指示符,并且日期格式化程序将解析日期字符串,就像它是本地时间一样,并给出错误的结果

以下是您的清理代码:

func convertDate(from inputFormat: String, to outputFormat: String) -> String? {
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = inputFormat
    dateFormatter.local = Locale(identifier: "en_US_POSIX")

    if let dateInLocal = dateFormatter.date(from: self) {
        dateFormatter.dateFormat = outputFormat
        dateFormatter.locale = Locale.current
        return dateFormatter.string(from: dateInLocal)
    }

    return nil
}

dateAndName = date.convertDate(from:"yyyy-MM-dd'T'HH:mm:ss.SSSZ", to: "EEEE, dd MMMM yyyy")
请注意,此函数应返回可选字符串。让调用方决定如何处理无效输入


还要注意用于分析输入字符串的特殊区域设置。

不要转义Z。Z表示UTC时间。如果你忽略它,你会得到一个当前时区的日期。这些可能会帮助你