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