2013-08-15 20 views
15

興味深い問題が出てきました。iOS:文字列から12/24時間に切り替える

サーバーからデバイスに文字列の時間を受信します。私はそれからNSDateに変換します。 デバイスが24時間表示するように設定されていたとき、寿命は良好でした。

今は12時間に設定されたデバイスでテストしています。すべてが機能しなくなりました。日付は私が最初の24時間の日付を示すデバイスのために完全に働いた

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
[dateFormat setDateFormat:@"HH:mm"]; 
self.startTime = [dateFormat dateFromString:(NSString *)self.startTime]; 

ではなく、12hourを持っていた

nullとして戻って来ています。

は、私はその後

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
[dateFormat setDateFormat:@"hh:mm"]; 
self.startTime = [dateFormat dateFromString:(NSString *)self.startTime]; 

これは正午12時まで正常に動作を試してみました、そして、すべての日付がnullとして返され

更新

私も追加しようとしている「」しかし、このまだヌルを返す。

if (startDate == nil) 
{ 
     NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
     [dateFormat setDateFormat:@"hh:mm a"]; 
     startDate = [dateFormat dateFromString:(NSString *)self.startTime]; 
} 

アップデート2

追加して、ローカルの追加:

NSLocale *twelveHourLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]; 
dateFormat.locale = twelveHourLocale; 
[dateFormat setDateFormat:@"hh:mm: a"]; 
+1

self.startTimeはどこから来ますか? –

+0

スタートタイムが@ "14:00"に設定されています – Burf2000

答えて

18

それは近いのですが...私はあなたが必要だと思う:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]; 
[dateFormatter setLocale:locale]; 
[dateFormatter setDateFormat:@"HH:mm"]; 
startDate = [dateFormatter dateFromString:(NSString *)self.startTime]; 
+0

ありがとう、ご親切に! – Burf2000

4

を動作しません。あなたは午前/午後を追加する必要があります追加します再度NSStringからNSDateに強制されます。 まずそれをNSStringに変換して、それを強制しないでください!

私は12,24時間フォーマットもサポートしていますが、問題はありません。

+0

私はそれを試しましたが、まだ私にnullを与えます – Burf2000

+0

@ Burf2000私の編集を参照してください –

+0

@ Burf2000私の最新の更新を見てください –

1

あなたはNSDateを変換したい:ssはすべてまだ

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
NSLocale *twelveHourLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]; 
dateFormat.locale = twelveHourLocale; 
[dateFormat setDateFormat:@"hh:mm a"]; 
startDate = [dateFormat dateFromString:(NSString *)self.startTime]; 
1
NSDateFormatter* df = [[NSDateFormatter alloc]init]; 

[df setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]]; 
[df setTimeZone:[NSTimeZone systemTimeZone]];  
[df setDateFormat:@"MM/dd/yyyy hh:mm a"]; 

NSDate* newDate = [df dateFromString:strDate4Convert];  
[df setDateFormat:@"MM/dd/yyyy HH:mm:ss"];  
NSString *newTimeStr = [df stringFromDate:newDate]; 
+0

あなたのコードに –

7

あなたは12時間形式にこの

12 to 24 hour format 


    NSDateFormatter* df = [[NSDateFormatter alloc] init]; 
    [df setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]]; 
    [df setTimeZone:[NSTimeZone systemTimeZone]]; 
    [df setDateFormat:@"hh:mm a"]; 
    NSDate* newDate = [df dateFromString:LocationTrackingStartTime]; 
    [df setDateFormat:@"HH:mm"]; 
    newDate = [df stringFromDate:newDate]; 

    24 to 12 hour format 

    NSDateFormatter* df = [[NSDateFormatter alloc] init]; 
    [df setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]]; 
    [df setTimeZone:[NSTimeZone systemTimeZone]]; 
    [df setDateFormat:@"yyyy-mm-dd hh:mm:ss"]; 
    NSDate* newDate = [df dateFromString:[df stringFromDate:[NSDate date]]]; 
    [df setDateFormat:@"hh:mm a"]; 
    newDate = [df stringFromDate:[NSDate date]]; 
+0

あなたのコードで私はwronge出力を持っています –

+0

私の日付と仮定2016-11-21 21:25:35と私は10.55として午前しかし、あなたのコードで私は午前2時55分を得た –

+0

@HimanshuMoradiya完全なシナリオ? – Madhuri

1
You just need to set the locale to take the am pm format. And everything else as usual. 

    NSDateFormatter * df = [[NSDateFormatter alloc]init]; 
    NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]; 
    [df setLocale:locale]; 
    [df setDateStyle:NSDateFormatterNoStyle]; 
    [df setTimeStyle:NSDateFormatterShortStyle]; 
    NSLog(@"%@", [df stringFromDate:pickUpDate]); 
2

変更を24時間形式を試すことができ、

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    //Set 24 hours date format 
    dateFormatter.dateFormat = @"HH:mm"; 

    //Here @"your24hours date string" is your string date with 24 hours format 
    NSDate *date = [dateFormatter dateFromString:@"your24hours date string"]; 

    //Set 12 hours date format 
    dateFormatter.dateFormat = @"hh:mm a"; 
    NSString *strDate = [dateFormatter stringFromDate:date]; 

    NSLog (@"%@", strDate); 

    //Output is in 12 hours date format. 
+0

何らかの理由で、あなたのコードが私のために働いた唯一のコードです。ありがとう! – PruitIgoe

関連する問題