2012-07-23 232 views
45

我正在使用NSDateFormatter在iPhone應用程序中工作。我從網絡服務獲得時間,如"00:00:00", "16:00:00","15:30:00" and so on。如果時間是"00:00:00" to "12 AM",如果時間是"16:00:00" to "4 PM",如果時間是「15:30:00」到「3.30 PM」,我需要將這些時間轉換爲 。我已經使用了下面的代碼,但是當我通過"16:00:00" the date returns null如何獲取上午/下午格式的時間iphone NSDateFormatter?

NSString *dats1 = @"16:00:00"; 
NSDateFormatter *dateFormatter3 = [[[NSDateFormatter alloc] init] autorelease]; 
[dateFormatter3 setDateStyle:NSDateFormatterMediumStyle]; 
[dateFormatter3 setDateFormat:@"hh:mm:ss"]; 
NSDate *date1 = [dateFormatter3 dateFromString:dats1]; 
NSLog(@"date1 : %@", date1); **// Here returning (null)** 

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"hh:mm a"]; 
NSLog(@"Current Date: %@", [formatter stringFromDate:date1]); **// Here also returning (null)** 
[formatter release]; 

當我路過 「00:00:00」 它返回 「12點」 正確。任何人都可以請幫我解決這個問題嗎?提前致謝。

+1

感謝所有發佈您的答案並幫助我的人。你們都回答正確,並幫助我解決這個問題。再次感謝。 – Gopinath 2012-07-23 07:45:13

+2

我放棄了所有的正確答案。非常感謝您的幫助。 – Gopinath 2012-07-23 07:48:03

+1

真的,你應該花一些時間閱讀「NSDateFormatter」的文檔,你可以自己回答這個問題。 – 2012-07-23 08:16:28

回答

104

如果你的時間格式爲24hrs請用"HH:mm:ss"格式。請測試代碼並讓我知道它是否適合您。我已經測試過它正在返回"4 PM"

NSString *dats1 = @"16:00:00"; 
NSDateFormatter *dateFormatter3 = [[[NSDateFormatter alloc] init] autorelease]; 
[dateFormatter3 setDateStyle:NSDateFormatterMediumStyle]; 
[dateFormatter3 setDateFormat:@"HH:mm:ss"]; 
NSDate *date1 = [dateFormatter3 dateFromString:dats1]; 
NSLog(@"date1 : %@", date1); **// Here returning (null)** 

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"hh:mm a"]; 
NSLog(@"Current Date: %@", [formatter stringFromDate:date1]); **// Here also returning (null)** 
[formatter release]; 

謝謝。

+0

12:12在這裏,但這返回12:12 pm ..嗯 – 2014-09-14 04:12:52

+0

它返回16:00在ios9 – 2015-10-20 09:38:30

+0

@PatelJigar添加此[dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@「en_US_POSIX」]]; – 2016-05-05 11:03:31

16

爲什麼你再次分配NSDateFormatter

你只需要把它格式化爲NSDate,然後再NSString

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
    [dateFormatter setDateFormat:@"HH:mm:ss"]; 

    NSDate *date = [dateFormatter dateFromString:dats1]; 

    [dateFormatter setDateFormat:@"hh:mm a"]; 

    NSString *formattedDate = [dateFormatter stringFromDate:date]; 

    NSLog(@"%@",formattedDate); 
+0

不錯的代碼... +1,但我首先想'dateFormatter setDateFormat:@「HH:mm:ss」];'沒有必要。 – Dilip 2013-06-13 12:57:04

+6

這是必要的因爲他有輸入小時格式的HH格式,即24小時格式 – Charan 2013-08-06 09:18:54

14

嘗試HH:mm:ss(請注意,小時格式首都)

+4

upvoted爲H vs h。 – 2013-01-03 20:10:07

7

希望有人會很有幫助誰願意把它in Swift

For Swift

let dateFormatter = NSDateFormatter() 
//if some one want 12AM,5PM then use "hh mm a" 
//if some one want 00AM,17PM then use "HH mm a" 
dateFormatter.dateFormat = "hh mm a" 
let stringDate = dateFormatter.stringFromDate(NSDate()) 
println(stringDate) 
+0

它不工作我的朋友 – 2015-07-16 10:46:48

6

這下面的代碼始終保持12小時格式:

NSLocale *12hourFomrat = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]; 
df.locale = 12hourFomrat; 

這始終保持24小時格式

NSLocale *24hourFormat = [[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"]; 
df.locale = 24hourFormat 
11

可以使用.ShortStyle這將適應當前的語言環境:

let timeFormatter = NSDateFormatter() 
timeFormatter.dateStyle = .NoStyle 
timeFormatter.timeStyle = .ShortStyle 
timeFormatter.stringFromDate(NSDate()) 

根據當前設備區域設置,返回17:125:12 PM

相關問題