NSDateFormatter文字列の回転時間の差8時間および共通フォーマット記録

2944 ワード

プロジェクトをしている間に、サーバー側から返された時間文字列が正しいということに気づき、結果的にNSDateに変換された時にはわけがわからず8時間も少なく、多くの資料を調べ、formatterのNSLocalをセットすればいいという話が多く、以下のように
  • 解決方法一locale(テスト済み、役に立たない)
  • を設定する
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    formatter.dateFormat = @"yyyyMMdd HHmmss";
    formatter.locale:[[NSLocale alloc] initWithLocaleIdentifier:@"zh_cn"]];
    
  • ソリューション2 timeZoneを使用して位相差を追加するタイムゾーン(テストされた、この時間偏差の問題を完璧に解決できる)、 date famatter String , は以下のコードを通じて、どのタイムゾーンNSArray *arr = [NSTimeZone knownTimeZoneNames];中国大陸のすべてのタイムゾーンが上海(上海タイムゾーンは中国の標準時間北京時間):“Asia/Schanghai”、重慶:“Asia/Chongqing”、ウルムチ:“Asia/Urumqi”、また中国に属するのは香港「Asia/Hong_Kong」、台北「Asia/Taipei」
  • 具体的な修正オフセット8時間タイムゾーンの問題は以下の通りです.
    
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    formatter.dateFormat = @"yyyyMMdd HH:mm:ss";
    
    //  
    NSDate *date = [formatter dateFromString:@"20170501 01:12:13"];
    //  ,
    NSTimeZone * zone = [NSTimeZone systemTimeZone];
    //  zone 
    NSInteger interval = [zone secondsFromGMTForDate:date];
    
    //  
    NSDate *systemZoneDate = [date dateByAddingTimeInterval:interval];
    
  • まとめNSDateFormatterの一般的なフォーマット

    yyyyyMMdd HH:mm:ss 20170520 13:14:59`
    yyyy-MM-dd HH:mm:ss 2017-05-20 13:14:59
  • です
    コードネーム
    代表的意義.

    G
    西暦時代
    例えばAD西暦
    yy
    年の後2位
    2017年の17
    yyyy
    完全年
    2017
    MM

    01-12と表示される月
    MMM
    簡写月英語
    Janなどの英語の月の略記として表示されます
    MMMM
    全書き月英語
    Janualyなどの英語の月のフルネームとして表示
    dd

    2桁表示、例えば02
    d

    1~2ビット表示、2
    EEE
    曜日を略す
    サンのように
    EEEE
    全部で何曜日書きますか.
    サンデーのように
    aa
    午後
    AM/PM
    H

    24時間制、0-23
    HH

    24時間制、00-23
    K

    12時間制、0-11
    m

    1~2ビット
    mm

    2位、00~60
    s

    1~2ビット
    ss

    2位、2位未満の前に0を補う
    S
    ミリ秒
    1秒は1000ミリ秒
    Z
    タイムゾーン
    GMT
  • 処理時間の共通クラスとNSCalendar
  • 1.calenderおよびcomponentsを使用して、一般的な年、月、日、曜日などの属性

    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDate *date = [NSDate date];
    NSDateComponents *components = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth fromDate:date];
    components
    @property NSInteger era;
    @property NSInteger year;
    @property NSInteger month;
    @property NSInteger day;
    @property NSInteger hour;
    @property NSInteger minute;
    @property NSInteger second;
    @property NSInteger weekday;
  • を取得します.
  • calendarを使用して、ある大きな区間に何個のセル間があるかを取得します.例えば、ある月に何日あるか

    NSCalendar *calendar = [NSCalendar calendarWithIdentifier:NSGregorianCalendar];
    NSDate *date = [NSDate date];
    NSRange range = [calendar rangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitMonth forDate:date];
    NSLog(" %ld ",range.length);