swift – 将string转换为date,然后转换为不同格式的string

假设我有一个简单的string,从一个string数组(表示date)中提取 –

var myDateString = "2015-11-25 04:31:32.0" 

现在,我想将其转换为2015年11月25日的string。

为此,我假设我需要 –

  • 使用NSDateFormatter从string获取一个NSDatedate对象
  • 从这个NSDate对象获取一个string通过使用一些function(我一直无法find)

我一直在Playground中尝试这个,但一直无法解决这样一个简单的问题。

这是我所尝试的 –

 Line 1| var dateFormatter = NSDateFormatter() Line 2| dateFormatter.locale = NSLocale.currentLocale() Line 3| dateFormatter.dateFormat = "YYYY-MM-dd HH:mm:ss.A" Line 4| let somedate = dateFormatter.dateFromString(str) Line 5| let somedateString = dateFormatter.stringFromDate(somedate!) 

在Xcode的边栏中,第4行显示"Nov 25, 2015, 12:00 AM" ,但是当我尝试打印某date的string时, somedate "2015-11-25 00:00:00.0"

我还没有find一个任何地方NSDates一个正确的解释。

在Java中,使用date的parse()format()函数更容易。

更新了Swift 3.0

您需要两个date格式化程序 – 一个用于理解您的inputstring并转换为NSDate,另一个用于创build输出string的格式化程序

  let myDateString = "2016-01-01 04:31:32.0" let dateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss.A" let myDate = dateFormatter.date(from: myDateString)! dateFormatter.dateFormat = "MMM dd, YYYY" let somedateString = dateFormatter.string(from: myDate) 

我已更新此答案将date格式化程序从YYYY更改为yyyy。 在大多数情况下,两者之间没有什么区别,但是YYYY可能会把今年头几天看作是上一个完整周的一部分。

苹果开发者指南是这样解释的。

一个常见的错误是使用YYYY。 yyyy指定日历年,而YYYY指定ISO年份周历中使用的年份(“年份”)。 在大多数情况下,yyyy和yyyy的数字相同,但是可能不同。 通常你应该使用日历年。

您将需要其他人build议的两个date格式化程序。 此外,您的问题之一是,您使用.A而不是.S的小数秒。 (请参阅@ MartinR的评论中指出的Unicodedate格式规范的链接)

A是一天中的毫秒

.S是分数秒

以下在游乐场:

 let dateString = "2015-11-25 04:01:32.0" let dateFormatter = NSDateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss.S" // Note: S is fractional second let dateFromString = dateFormatter.dateFromString(dateString) // "Nov 25, 2015, 4:31 AM" as NSDate let dateFormatter2 = NSDateFormatter() dateFormatter2.dateFormat = "MMM d, yyyy" let stringFromDate = dateFormatter2.stringFromDate(dateFromString!) // "Nov 25, 2015" as String