首页 > 解决方案 > Swift dateformatter.date(from: string) 奇怪的行为

问题描述

import UIKit

let dateString="2018.03.11"

let df = DateFormatter()

df.timeZone=TimeZone(secondsFromGMT: 0)
df.dateFormat="YYYY.MM.dd"

let date=df.date(from: dateString)

print("orig dateString: \(dateString)")
print("date(from: string): \(date)")
print("converted again: \(df.string(from: date!))")

现在这段代码似乎按预期工作。输入和输出日期都相同:orig dateString: 2018.03.11

日期(来自:字符串):可选(2018-03-11 00:00:00 +0000)

再次转换:2018.03.11

但是,如果我尝试更改输入格式:

import UIKit

    let dateString="11.03.2018"

    let df = DateFormatter()

    df.timeZone=TimeZone(secondsFromGMT: 0)
    df.dateFormat="dd.MM.YYYY"


    let date=df.date(from: dateString)

    print("orig dateString: \(dateString)")
    print("date(from: string): \(date)")
    print("converted again: \(df.string(from: date!))")

我得到以下结果:

原始日期字符串:11.03.2018

日期(来自:字符串):可选(2017-12-24 00:00:00 +0000)

再次转换:24.12.2017

date(from: String) 似乎以我不理解的方式初始化日期。任何帮助表示赞赏。谢谢你。

标签: swiftstringdatedateformatter

解决方案


问题在于日期格式。

更改这些行:

df.dateFormat="YYYY.MM.dd"
df.dateFormat="dd.MM.YYYY"

对此:

df.dateFormat="yyyy.MM.dd"
df.dateFormat="dd.MM.yyyy"

推荐阅读