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

Posted

技术标签:

【中文标题】将日期转换为格式日、日月年【英文标题】:Convert date to format Day, date month year 【发布时间】:2019-04-16 22:35:27 【问题描述】:

我正在尝试将日期字符串从 yyyy-MM-dd'T'HH:mm:ss.SSS'Z' 转换为“日期、日期月份年份”,例如“2018 年 1 月 1 日星期一”。

我正在使用我的辅助函数将日期字符串从一种格式转换为另一种格式。在下面的函数中,我不确定to 需要传递什么参数:

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: "")

【问题讨论】:

不要转义 Z。Z 表示 UTC 时间。如果您忽略它,您将获得当前时区的日期。 这些可能对你有帮助 https://***.com/a/52297497/5170595 https://***.com/a/33344575/5170595 【参考方案1】:

请参阅文档了解日期格式。

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")

请注意,此函数应返回一个可选字符串。让调用者决定如何处理无效输入。

还要注意用于解析输入字符串的特殊语言环境。

【讨论】:

以上是关于将日期转换为格式日、日月年的主要内容,如果未能解决你的问题,请参考以下文章

如何在java中将日期转换为2016年2月26日[重复]

将文本日期(2020 年 3 月 21 日)转换为 dd/mm/yyyy

SQL中如何将数值格式的20110801(2011年8月01日)转换为日期格式的201108或者2011-08?

将 Avro 中存储为整数(自 1970 年 1 月 1 日以来的天数)的“日期”转换为雪花“日期”类型

SQL怎么把日期格式1990-01-01转换成1990年1月1日?

js怎么把时间戳转换为日期格式