在 iphone 中找不到正确的日期格式化程序 (DateFormatter)

Can't find the right date formatter (DateFormatter) in iphone

我正在从服务器获取日期字符串,例如“2017-08-05T00:30:00.000+02:00”。下面是我的日期格式化程序代码。

 let dateFormatter: DateFormatter = DateFormatter()
 let serverDateString = "2017-08-05T00:30:00.000+02:00"
 dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZZ"
 dateFormatter.locale = Foundation.Locale(identifier: "en_US_POSIX")
 let currentDate: Date = dateFormatter.date(from: serverDateString)!

但它 returns 2017-08-04 22:30:00 +0000。这是错误的。有什么建议吗?

试试这个

let dateFormatter: DateFormatter = DateFormatter()
let serverDateString = "2017-08-05T00:30:00.000+02:00"
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssXXX"
dateFormatter.locale = Foundation.Locale(identifier: "en_US_POSIX")
let currentDate: Date = dateFormatter.date(from: serverDateString)!

希望对您有所帮助

其实你的代码不错。 我复制了你的数据并 运行 它在操场上。 你想要什么样的格式?

yyyy-MM-dd'T'hh:mm:ss.SSSZZZZZZ

这是您输入字符串的正确日期格式。这里是 the Apple Document 更多描述。

这是我的代码:

var strInputDateString: String = "2017-08-05T00:30:00.000+02:00"
var dateFormat = DateFormatter()
dateFormat.dateFormat = "yyyy-MM-dd'T'hh:mm:ss.SSSZZZZZZ"
    //Set new dateFormate
var date1: Date? = dateFormat.date(from: strInputDateString)
dateFormat.dateFormat = "dd-MM-YYYY hh:mm:ss"
    // Your Desire
var strOutputDateString: String = dateFormat.string(from: date1!)
print("\(strInputDateString)")
print("\(strOutputDateString)")

输出:

Main input String:2017-08-05T00:30:00.000+02:00
Converted String:  05-08-2017 04:00:00

目前,我尝试将您的日期格式转换为我的习惯。它给了我完美的输出。

你的日期解析代码是正确的:2017-08-05T00:30:00.000+02:002017-08-04 22:30:00 +0000代表相同的时间,只是在不同的时区。您唯一的问题是 Date 实际上没有存储时区

您缺少的步骤是再次使用 DateFormatter 将日期格式化为字符串。当您在日期上使用 print 时,它将始终显示 GMT。出于说明目的,我将时区设置为柏林以匹配 +2:00 的原始偏移量。

let dateFormatter: DateFormatter = DateFormatter()
let serverDateString = "2017-08-05T00:30:00.000+02:00"
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZZ"

// Hard set to Berlin
dateFormatter.timeZone = TimeZone(identifier: "Europe/Berlin")
let currentDate: Date = dateFormatter.date(from: serverDateString)!

// Your missing step
dateFormatter.string(from: currentDate)

记住 DateFormatters 是关于:

  • 从字符串解析 - df.date(from: String)
  • 根据日期格式化 - df.string(from: Date)

在Swift3 您可以将服务器时间字符串更改为 UTC 时间 Date 为:

let dateFormatter: DateFormatter = DateFormatter()
var serverDateString = "2017-08-05T00:30:00.000+02:00"
let index = serverDateString.index(serverDateString.startIndex, offsetBy: 19)
serverDateString = serverDateString.substring(to: index)
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
dateFormatter.timeZone = TimeZone.init(identifier: "UTC")
let currentDate: Date = dateFormatter.date(from: serverDateString)!