菜鸟教程小白 发表于 2022-12-11 19:40:15

ios - 将未知格式(任何格式)的字符串转换为日期


                                            <p><p>我有包含日期​​字符串的数据。 </p>

<p>通常它会在 'Jan. 3, 1966' 类型格式,但由于国际差异,可能并不总是如此。 </p>

<p>我需要读取数据并将其转换为标准日期字符串('YYYY-MM-DD')。</p>

<p>基本上这是我目前所拥有的:</p>

<pre><code>var dataString = &#39;Jan. 3, 1966&#39;
var dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = # I DON&#39;T KNOW THE EXACT INPUT FORMAT !
let dateValue = dateFormatter.dateFromString(dataString)
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p><strong>Xcode 11.4 • Swift 5.2 或更高版本</strong></p>
<p>您可以按如下方式使用 NSDataDetector:</p>
<pre><code>extension String {
    var nsString: NSString { self as NSString }
    var length: Int { nsString.length }
    var nsRange: NSRange { .init(location: 0, length: length) }
    var detectDates: ? {
      try? NSDataDetector(types: NSTextCheckingResult.CheckingType.date.rawValue)
                .matches(in: self, range: nsRange)
            .compactMap(\.date)
    }
}
</code></pre>
<hr/>
<pre><code>extension Collection where Iterator.Element == String {
    var dates: { compactMap(\.detectDates).flatMap{$0}
    }
}
</code></pre>
<p>测试:</p>
<pre><code>let dateStrings = [&#34;January 3, 1966&#34;,&#34;Jan 3, 1966&#34;, &#34;3 Jan 1966&#34;]
for dateString in dateStrings {
    if let dateDetected = dateString.detectDates?.first {
      print(dateDetected)
      // 1966-01-03 14:00:00 +0000
      // 1966-01-03 14:00:00 +0000
      // 1966-01-03 14:00:00 +0000
    }
}


let dateStrings = [&#34;January 3, 1966&#34;,&#34;Jan 3, 1966&#34;, &#34;3 Jan 1966&#34;]

for date in dateStrings.dates {
    print(date)
    // 1966-01-03 14:00:00 +0000
    // 1966-01-03 14:00:00 +0000
    // 1966-01-03 14:00:00 +0000
}
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 将未知格式(任何格式)的字符串转换为日期,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/43972217/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/43972217/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 将未知格式(任何格式)的字符串转换为日期