【问题标题】:From String to NSDate in Swift在 Swift 中从字符串到 NSDate
【发布时间】:2014-10-30 10:20:56
【问题描述】:

我有一个string,其中包含一个date,格式如下: 2014 年 9 月 4 日星期四 10:50:12 +0000

您知道如何将其转换为: 2014 年 4 月 9 日 (dd-MM-yyyy)

当然,使用 Swift

【问题讨论】:

    标签: string date swift format nsdate


    【解决方案1】:

    试试这样的:

    let mydateFormatter = NSDateFormatter()
    mydateFormatter.dateFormat = "EEE, MMM d, YYYY hh:mm:ss.SSSSxxx"
    let date = mydateFormatter.dateFromString(yourdatestring)
    

    如果它不起作用,请检查当前的日期格式: http://userguide.icu-project.org/formatparse/datetime/

    【讨论】:

      【解决方案2】:

      如果上述方法不起作用,这应该可以解决问题:

      let formatter = DateFormatter()
      formatter.locale = Locale(identifier: "US_en")
      formatter.dateFormat = "E, dd MMM yyyy HH:mm:ss Z"
      let date = formatter.date(from: "Thu, 04 Sep 2014 10:50:12 +0000")
      

      【讨论】:

        【解决方案3】:

        我知道该问题的答案已被接受,但该答案中显示的方法并未完全以 dd-MM-yyyy 的格式输出日期。所以无论如何我都会发布这个,所以有人可能会觉得它有用。

        Swift 的一个很酷的特性是扩展。所以我要把它创建为一个扩展,以便它可以重复使用。

        NSDate 创建一个扩展并将此代码放入其中。

        import Foundation
        
        extension NSDate {
        
            convenience init(dateString: String) {
                let dateStringFormatter = NSDateFormatter()
                dateStringFormatter.dateFormat = "E, dd MMM yyyy HH:mm:ss Z"
                dateStringFormatter.timeZone = NSTimeZone(name: "GMT")
                let date = dateStringFormatter.dateFromString(dateString)
        
                self.init(timeInterval:0, sinceDate:date!)
            }
        
            func getDatePart() -> String {
                let formatter = NSDateFormatter()
                formatter.dateFormat = "dd-MM-yyyy"
                formatter.timeZone = NSTimeZone(name: "GMT")
        
                return formatter.stringFromDate(self)
            }
        }
        

        这就是你使用它的方式。

        NSDate(dateString: "Thu, 04 Sep 2014 10:50:12 +0000").getDatePart()
        

        输出:04-09-2014

        您可以更改这两个函数中的格式以接受和输出各种格式的日期。

        【讨论】:

        • 它与 dateStringFormatter.locale = NSLocale(localeIdentifier: "en") 一起使用,但是当我尝试使用另一种语言运行时,它给出了“致命错误:在展开可选值时意外发现 nil”我怎么能更改语言?
        【解决方案4】:

        从iOS 15开始,我们可以这样转换:

        let strategy = Date.ParseStrategy(format: "\(weekday: .abbreviated), \(day: .twoDigits) \(month: .abbreviated) \(year: .defaultDigits) \(hour: .twoDigits(clock: .twentyFourHour, hourCycle: .zeroBased)):\(minute: .twoDigits):\(second: .twoDigits) \(timeZone: .iso8601(.short))", timeZone: .current)
        if let date = try? Date("Thu, 04 Sep 2014 10:50:12 +0000", strategy: strategy) {
            // 04-09-2014
            let dateString = "\(date.formatted(.dateTime.day(.twoDigits)))-\(date.formatted(.dateTime.month(.twoDigits)))-\(date.formatted(.dateTime.year()))"
        }
        

        【讨论】:

          猜你喜欢
          • 2023-03-18
          • 2015-09-07
          • 1970-01-01
          • 1970-01-01
          • 2016-04-10
          • 2012-04-03
          • 1970-01-01
          • 2017-07-20
          相关资源
          最近更新 更多