2017-02-27 631 views
1

我有這樣的日期時間字符串。iOS將日期字符串與上午,下午到NSDate(設備設置與24小時格式)

2017年2月20日03:32下午//這次是新加坡時間。所以我需要選擇新加坡時區

而我試圖轉換爲這樣的NSDate。

NSDate *redeemDate = [NSDate dateWithString:currentDateString formatString:@"dd MMM yyyy hh:mma" timeZone:[NSTimeZone timeZoneForSecondsFromGMT:8*3600]]; 

雖然我使用這個庫。但是如果我手動格式化也是一樣的。 https://github.com/MatthewYork/DateTools

如果設備使用12小時制格式,那沒問題,但如果使用24小時格式,我得到零。我可以知道爲什麼嗎?我想可能是因爲hh我改成HH。但它也不好。

+1

你從哪裏得到的字符串?該字符串總是以該格式還是基於用戶的設備進行更改? –

+0

它來自我的後端。它不會根據用戶的設備而改變 –

回答

1

HH:mm =>看起來像00:12,23:00 ...這有24小時格式。

hh:mm =>將看起來像01:00Am,02:00Am,... 01:00 pm這有12小時格式。

因此,如果要以其他時間/日期格式顯示,則必須將其轉換爲適當的格式。

這裏看看http://www.unicode.org/reports/tr35/tr35-19.html#Date_Format_Patterns

例子:

NSDate *date = [NSDate new]; 
NSString* format = @"dd MMM yyyy hh:mma'Z'"; 

NSDateFormatter* dateFormat = [[NSDateFormatter alloc] init]; 
NSCalendar *calendar = [NSCalendar currentCalendar]; 
calendar.timeZone = [NSTimeZone timeZoneWithName:@"SGT"]; 

[dateFormat setDateFormat:format]; 
[dateFormat setCalendar: calendar]; 

NSDate* formatDate = [dateFormat dateFromString:[dateFormat stringFromDate:date]]; 

你能試試嗎?

+0

問題是我得到零。我該怎麼辦? –

+0

你可以用你想要的任何格式顯示你的日期,我不認爲它必須對設備時間格式做任何事情。 – Balanced

+0

我編輯了我的答案 – Balanced

1

您正在使用的庫不好。您還需要在NSDateFormatter上設置其他參數,這些參數尚未設置並正在使用系統設置。請勿使用DateTool只需創建您自己的NSDateFormatter。除了時區和formatString之外,還必須設置日曆區域設置

看到 https://developer.apple.com/library/content/qa/qa1480/_index.html

+0

謝謝。是的,我應該設置這2個值。我注意到我的設備區域設置是中文。這就是爲什麼我沒有。 –

相關問題