2015-05-20 67 views
2

使用JSON,我從我的數據庫中提取一個日期,該日期在php中被格式化爲Y-m-d。例如。 2015年5月27日。將mysql日期轉換爲NSDate

我已經將日期存儲在swift中,並且可以在以相同方式打印字符串時看到它的格式。我已經按照其他答案和教程嘗試將日期轉換爲dd-MM-yyyy,但是每次我都返回'nil'。

如果我嘗試將日期轉換爲YYYY-MM-DD我會得到 '2015年5月26日23:00:00 +0000'

我的代碼:

var survey_date = prefs.valueForKey("SURVEY_DATE") as! String 

let dateFormatter = NSDateFormatter() 
dateFormatter.dateFormat = "dd-MM-yyyy" 
var date = dateFormatter.dateFromString(survey_date) as NSDate! 

println(date) 

self.survey_date.text = "Your survey is scheduled for \(date)" 

回答

1

您已將日期格式化程序的dateFormat屬性設置爲dd-MM-yyyy,但survey_date中的字符串格式爲yyyy-MM-dd。因此,此行中的日期值...

var date = dateFormatter.dateFromString(survey_date) as NSDate! 

nil。這是一個簡單的解決方法 - 將dateFormat更改爲yyyy-MM-dd

yyyy-MM-dd格式中打印出NSDate格式也是一個簡單的修復方法。正如你所用NSDateFormatterdateFromString()方法將字符串,其格式由其dateFormat屬性指定爲NSDate轉換,使用NSDateFormatterstringFromDate()方法將NSDate轉換成具有dateFormat的格式的字符串。

這裏是你的代碼,應用了這兩項修正:

var survey_date = prefs.valueForKey("SURVEY_DATE") as! String 

let dateFormatter = NSDateFormatter() 
dateFormatter.dateFormat = "yyyy-MM-dd" 
var date = dateFormatter.dateFromString(survey_date) as NSDate! 
let outputDate = dateFormatter.stringFromDate(date) 

println(outputDate) 

self.survey_date.text = "Your survey is scheduled for \(outputDate)" 
0

閱讀其他本網站上的答案,看來,斯威夫特沒有原生的Date對象,但你可以改用可可NSDate對象:

var date = Date.parse("2014-05-20") 

第二個參數是格式,默認爲yyyy-MM-dd(這是MySQL日期是什麼)。

我想象一旦你有一個NSDate對象,你就可以用你選擇的格式打印它。

+0

我的問題越來越VAR survey_date = prefs.valueForKey( 「SURVEY_DATE」)爲!要轉換爲NSDate的字符串 – tomantford

+0

如果你看上面,Date.parse的第一個參數是一個字符串,所以把你的MySQL日期轉換爲一個字符串,然後將它傳遞給'parse'方法。 –

+0

日期是未解決的標識符 – tomantford

1

使用日期格式化程序的代碼是正確的,並且實際上正常工作。

日期格式化程序默認爲用戶當前所在的時區,因此您輸入的日期爲「2015-05-27」的日期將假設爲您當地時區的當天午夜(我認爲)。

Println以UTC顯示日期,因此您可以看到UTC中的輸出。顯然你在UTC + 1,所以日期顯示爲前一天晚上11點。

您可以使用其他日期格式化程序將您的日期以您想要的任何格式作爲當地時區中的字符串輸出。