1

API から次の日付を文字列形式で受け取ります

2015-04-18 06:08:28.000000

日付を次の形式にしたいd/M/yyyy

私は次のことを試しました

NSString *datevalue = (NSString*)value;
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"d/M/yyyy"];
NSDate *date =  [formatter dateFromString:datevalue];
NSString *currentDate = [formatter stringFromDate:date];

これはNILを返します。考えられる問題は何ですか、またはobjective-cでそのような日付をフォーマットするにはどうすればよいですか?

ありがとう。

4

3 に答える 3

1

日付文字列の読み取りと書き込みに同じフォーマッタを使用することはできません。これらは異なるためです。入力した日付の形式が正しくありません。

// input string date: 2015-04-18 06:08:28.000000
// [formatter setDateFormat:@"d/M/yyyy"]; // incorrect
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss.SSSSSS"]; 

以下はサンプルコードです

//
//  main.m
//  so29732496
//
//  Created on 4/19/15.
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSLog(@"Hello, World!");

        NSString *dateStringFromAPI = @"2015-04-18 06:08:28.000000";
        NSString * const kAPIDateFormat = @"yyyy-MM-dd HH:mm:ss.SSSSSS";

        // convert API date string
        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
        [formatter setDateFormat:kAPIDateFormat];
        NSDate *apiDate =  [formatter dateFromString:dateStringFromAPI];


        // now if I was output the api date to another format
        // I have to change the formatter
        [formatter setDateFormat:@"dd/M/yyyy"];
        NSString *currentDate = [formatter stringFromDate:apiDate];

        NSLog(@"Current Date: %@", currentDate);
    }
    return 0;
}
于 2015-04-19T16:31:44.193 に答える
1

Black Frogの答えに追加したいだけです:彼が述べたように、読み取り/書き込みにはさまざまなフォーマッターが必要です。

ただし、正しい形式は次のとおりです。

[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss.SSSSSS"];

Apple のドキュメントによると、小数秒は「S」でフォーマットする必要があります。

ここを参照してください: NSDateFormat

また、ここにあなたのタスクを達成するための例があります:

    NSString *datevalue = @"2015-04-18 06:08:28.000000";
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss.SSSSSS"];
    NSDate *date =  [formatter dateFromString:datevalue];
    [formatter setDateFormat:@"dd/MM/yyyy"];
    NSString *currentDate = [formatter stringFromDate:date];

    NSLog(@"%@",date);
    NSLog(@"%@",currentDate);
于 2015-04-19T16:40:47.523 に答える
1

他の人が議論したように、API日付をオブジェクトにyyyy-MM-dd HH:mm:ss.SSSSSSS変換する日付フォーマッターにはフォーマット文字列を使用する必要があります。NSDateただし、このフォーマッタのtimeZoneおよびプロパティも考慮する必要があります。locale

  • 通常、RFC 3339 の日付は GMT で交換されます。API でこれを確認しますが、通常は GMT/UTC/Zulu です。その場合、おそらくタイムゾーンを明示的に設定することもできます:

    formatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];
    

    ただし、API が期待するタイムゾーンを確認してください。

  • より微妙な問題は、非グレゴリオ暦のユーザーの処理です。

    formatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
    

詳細については、Apple Technical Q&A 1480を参照してください。

明らかに、これらのdateFormattimeZone、およびlocaleプロパティは、API 日付文字列をNSDateオブジェクトに変換するためのものです。その後、エンド ユーザー向けに日付を出力するときは、別のフォーマッタを使用して、デフォルトで標準timeZonelocaleプロパティを設定dateFormatし、出力に必要な任意の文字列を使用します。(率直に言って、私は通常dateFormat、ユーザー出力フォーマッタに文字列を使用することはお勧めしません。むしろ、dateStyleおよびtimeStyleプロパティに適切な値を使用するだけです。)

于 2015-04-19T17:47:21.220 に答える