【问题标题】:How can I change the date format in Swift5 (ISO8601)?如何更改 Swift5 (ISO8601) 中的日期格式?
【发布时间】:2020-03-11 18:47:34
【问题描述】:

我搜索了几个小时,但我只找到了这样的示例:


let dateString = "2020-03-02T19:37:00.073+01:00" //get from api
let dateFormatter = ISO8601DateFormatter()

dateFormatter.formatOptions = [
    .withTimeZone,
    .withInternetDateTime,
    .withFractionalSeconds
]

print(dateFormatter.date(from: dateString) ?? "no valid date")

//2020-03-02 18:37:00 +0000

我怎样才能像这样格式化这个日期:

02.03.2020 或 02.03.2020 18:37(德语格式)

方法 ISO8601DateFormatter() 没有 dateStyle 属性?

如何在标签中显示格式化日期?

谢谢

【问题讨论】:

  • 您想要的格式不是 ISO8601 格式。使用普通的DateFormatter 来获取它们。您正在将Date 打印到控制台。您必须将 Date 转换为 String
  • 这能回答你的问题吗? Date Format in Swift
  • 我想将给定的日期(字符串:2020-03-02T19:37:00.073+01:00)更改为德语格式。在上面的示例中,只有当前日期被格式化。我该怎么做呢,谢谢。
  • 对不起,我看错了,this question 应该可以帮助你

标签: swift dateformatter


【解决方案1】:

我有一份 Salesforce POC 的参考资料,他们使用这种格式:https://salesforce.stackexchange.com/questions/108896/cannot-deserialize-instance-of-datetime-from-value-string-value

我有一个扩展供使用:

extension Date {
    func salesforceFormat() -> String {
        let dateformat = DateFormatter.salesforceDateFormatter
        return dateformat.string(from: self)
    }
}

extension String {
    func fromSalesforceDateToDate() -> Date? {
        let dateformat = DateFormatter.salesforceDateFormatter
        return dateformat.date(from: self)
    }
}

extension DateFormatter {
    static var salesforceDateFormatter: DateFormatter {
        let dateformat = DateFormatter()
        dateformat.calendar = Calendar(identifier: .iso8601)
        dateformat.locale = Locale(identifier: "en_US_POSIX")
        dateformat.timeZone = TimeZone(secondsFromGMT: 0)
        dateformat.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSXXXXX"
        return dateformat
    }
}

然后您可以从字符串转换为日期,从日期转换为字符串。扩展不是最好的解决方案,但例如可以工作。

【讨论】:

    【解决方案2】:

    感谢您的帮助

    这里是我的解决方案:

    func convertDateFormater(_ date: String) -> String
    {
        let dateFormatter = ISO8601DateFormatter()
        dateFormatter.timeZone = TimeZone.current
        dateFormatter.formatOptions = [.withFractionalSeconds, .withTimeZone, .withInternetDateTime]
        let date = dateFormatter.date(from: date)
    
        let dateFormatter2 = DateFormatter()
        dateFormatter2.dateFormat = "dd.MM.yyyy"
        return  dateFormatter2.string(from: date!)
    }
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多