Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift:日期可以';t parse";yyyy-MM-dd';T';HH:mm:ss“;一串_Swift_Date - Fatal编程技术网

Swift:日期可以';t parse";yyyy-MM-dd';T';HH:mm:ss“;一串

Swift:日期可以';t parse";yyyy-MM-dd';T';HH:mm:ss“;一串,swift,date,Swift,Date,我目前正在尝试调用一个Api,它会返回一些信息和更改日期。之后,我想以“dd.MM.yyyy”格式显示日期。我从Api中得到的日期如下:“2020-03-20T19:30:00”。因此,我在这个问题上使用了解决方案:使它看起来像我想要的格式 不幸的是,当我试图解析从Api获得的日期时,我总是得到一个nil值 我编写的代码如下所示: let inputFormatter : DateFormatter = DateFormatter() inputFormatter.dateFormat = "y

我目前正在尝试调用一个Api,它会返回一些信息和更改日期。之后,我想以“dd.MM.yyyy”格式显示日期。我从Api中得到的日期如下:“2020-03-20T19:30:00”。因此,我在这个问题上使用了解决方案:使它看起来像我想要的格式

不幸的是,当我试图解析从Api获得的日期时,我总是得到一个nil值

我编写的代码如下所示:

let inputFormatter : DateFormatter = DateFormatter()
inputFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
let dateFormatter : DateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd.MM.yyyy"

//date is always nil 
let date = inputFormatter.date(from: content?.DateTime ?? "2020-03-20T19:30:00")

dateLabel.text = dateFormatter.string(from: date ?? Date())

有人知道为什么我总是得到一个零值,如果我转换日期的方式是好的/坏的做法吗

@Leo Dabus给了我们很好的分数。有趣的是,我使用字符串“2020-03-20T19:30:00”在操场上测试了您的代码,即使不设置区域设置,它也能完美地工作。我认为
内容?.DateTime
有问题。您可能应该使用的示例代码:

`


`

Yep,将
inputFormatter
locale
设置为
en\u US\u POSIX
是个好主意。或者,更好的方法是使用,它负责所有这些,而不是使用
DateFormatter
,然后,您不必设置
区域设置
,或者
日期格式
@Rob ISO8601DateFormatter如果在末尾没有时区Z,就无法工作,正如Rob刚才提到的那样,它会显示您的日期,当然是关于用户的设备区域设置和设置@LeoDabus。但是对于iOS 11和更高版本来说,它是合适的工具。顺便说一句,在没有时区限定符的情况下,它代表的时区有点不清楚(例如,格林威治标准时间7:30pm,本地时间7:30pm,服务器时区7:30pm?)。根据定义,ISO8601字符串假定在没有时区限定符的情况下(例如,
Z
),它位于本地时区。但大多数web服务通常以GMT/UTC/Zulu格式报告日期字符串。您可能需要准确地确认web服务正在做什么。如果这是您自己的Web服务,您可能会考虑使用时区信息来使用完全合格的ISO 8601/RFC 3339日期字符串。导致此问题的原因是content.DateTime。在我的代码中,这个变量是一个可选值。在我打开此值后,日期被正确读取。也许你们中的一些人已经解释了为什么可选值会导致nil值。但正如@Rob所说,我正在尝试在将来使用ISO8601数据格式化程序。。。当然,它可能在您的特定设备上运行良好,但在具有不同语言环境的不同设备上,如果您不手动将格式化程序的
语言环境设置为
en_US\u POSIX
,它仍然可能失败。如果使用
DateFormatter
解析ISO 8601或RFC 3339日期字符串,则必须设置
locale
,以确保无论设备设置如何,它都能正常工作。
let dateFormatter : DateFormatter = DateFormatter()
let locale = Locale(identifier: "en_US_POSIX")

dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
dateFormatter.locale = locale

guard let date = dateFormatter.date(from: "2020-03-20T19:30:00") else {
  fatalError("Could not create date")
}
print(date)