“iOS”的正确日期格式;可选项(1)、可选项(19)、可选项(2017);

“iOS”的正确日期格式;可选项(1)、可选项(19)、可选项(2017);,ios,swift,nsdateformatter,Ios,Swift,Nsdateformatter,现在我的问题是dateStr4的正确日期格式是什么。我知道我可以通过从该字符串中删除Optional子字符串来实现这一点。但我不想那样做。我只是想知道什么应该是正确格式的字符串?显然发现日期子字符串是可选的,您可以做的是在连接日期元素时,确保变量已展开 如果让{}或使用打开可选变量。您正在尝试显示可选变量的内容。发布您的代码,我们可以帮助您修复它 通常,您会使用如下代码: let dateStr1 = "1:19:2017" // Type one let dateStr2 = "1,19,20

现在我的问题是
dateStr4
的正确日期格式是什么。我知道我可以通过从该字符串中删除
Optional
子字符串来实现这一点。但我不想那样做。我只是想知道什么应该是正确格式的字符串?

显然发现日期子字符串是可选的,您可以做的是在连接日期元素时,确保变量已展开


如果让{}或
使用
打开可选变量。

您正在尝试显示可选变量的内容。发布您的代码,我们可以帮助您修复它

通常,您会使用如下代码:

let dateStr1 = "1:19:2017" // Type one
let dateStr2 = "1,19,2017" // Type two
let dateStr3 = "(1)(19)(2017)" // Type three
let dateStr4 = "Optional(1),Optional(19),Optional(2017)"

let dateFormatter = DateFormatter()

dateFormatter.dateFormat = "mm:dd:yyyy"
let date1 = dateFormatter.date(from: dateStr1)
// ouput: Jan 19, 2017, 12:01 AM

dateFormatter.dateFormat = "mm,dd,yyyy"
let date2 = dateFormatter.date(from: dateStr2)
// ouput: Jan 19, 2017, 12:01 AM

dateFormatter.dateFormat = "(mm)(dd)(yyyy)"
let date3 = dateFormatter.date(from: dateStr3)
// ouput: Jan 19, 2017, 12:01 AM

dateFormatter.dateFormat = ? // what would be correct formatted string
let date4 = dateFormatter.date(from: dateStr4)
// ouput: nil
如果let
语法称为“可选绑定”,则称为

更好的方法是使用
DateFormatter
自动将日期转换为字符串
DateFormatter
对象自动处理到不同国家/地区日期格式的转换,这可能非常复杂。

正确的日期格式是:

var dateString: String 
if 
  let month = month,
  let day = day, 
  let year = year {
    dateString = "\(day) Month \(month), \(year)"
  }
  else { 
    dateString = "One of your components is nil"
  }

输出:
2017-01-18 18:01:00+0000

最好防止创建带有
可选(n)
的字符串,而不是解析伏都教,显式打开选项,然后通过
日期格式化程序
使用
d-MM-yyyyy
或其他方法解析日期(1-19-2017)。不要尝试解析日期str4。打开选项。实际上它来自后端。所以我不能阻止你。
dateFormater.dateFormat = "'Optional'(mm),'Optional'(dd),'Optional'(yyyy)"