DX・デジタルトランスフォーメーション

AppStoreにて無料公開中! ”システム手帳”で検索! - AppStoreへ iPad版 - iPhone版

ブロックチェーン・暗号技術 | android | iOS | Web | アプリの著作権 | 日本のなりたち | 禅・大乗仏教 | 新しい社会

iOSで年月日を操作するコツ

iOSで今月の1日や前月末日を求めたいことが頻繁にある。

iOSで年月日を操作するには次の3つを押さえる必要がある。

これについては、どのプラットフォームでもどの言語でも同様だ。

・カレント・カレンダー

通常はグレゴリオ暦を使う。

・システム・タイムゾーン

日本時間やグリニッジ標準時などそのプラットフォームで設定されているタイムゾーンを使う。

コンピュータがもつ時計(グリニッジ標準時をベースとして1970年1月1日からの秒数)を各国の時差を勘案して年月日表示するために使うものだ。

日本時間を指定した場合は、グリニッジ標準時よりちょうど9時間早い時間を表示する。

・NSDateComponents

iOSの場合には、NSDate そのものではなく別クラスの NSDateComponents を介して年月日の操作を行う。

-

1)カレント・カレンダーを指定すること

年月日を操作するには、NSCalendarクラスを指定する必要がある。


    NSCalendar *calendar = [NSCalendar currentCalendar];

2)NSDateComponentsクラスを使用すること

日付を操作したりNSDateから年月日を抽出したりするには、NSDateComponents クラスを使う。


    NSDate *date = [NSDate date];
    NSDateComponents *dateComponents = [calendar components:NSCalendarUnitYear |
                                        NSCalendarUnitMonth  |
                                        NSCalendarUnitDay
                                         fromDate:date];

3)タイムゾーン(NSTimeZone)はシステム・タイムゾーン(iPhone設定のタイムゾーン)を指定すること


    [dateComponents setTimeZone:[NSTimeZone systemTimeZone]];

4)1ヶ月前の NSDate を求める方法

NSDateComponents#setMonth をマイナス1することで前月を表す。

\* 年末年始にまたがる(年が変わる)場合も対応している。


    NSDate *date = [NSDate date];
    NSDateComponents *dateComponents = [calendar components:NSCalendarUnitYear |
                                        NSCalendarUnitMonth  |
                                        NSCalendarUnitDay
                                         fromDate:date];
    [dateComponents setYear:dateComponents.year];
    [dateComponents setMonth:dateComponents.month - 1];
    [dateComponents setDay:dateComponents.day];
    NSDate *aMonthAgo = [calendar dateFromComponents:dateComponents];

5)前月の1日の NSDate を求める方法

4で1ヶ月前の NSDate を求めた後に NSDateComponents#setDay に1を指定する


    NSDateComponents *dateComponents = [calendar components:NSCalendarUnitYear |
                                        NSCalendarUnitMonth  |
                                        NSCalendarUnitDay
                                       fromDate:aMonthAgo];
    [dateComponents setYear:dateComponents.year];
    [dateComponents setMonth:dateComponents.month];
    [dateComponents setDay:1];
    NSDate *aMonthAgo = [calendar dateFromComponents:dateComponents];

6)前月の月末の NSDate を求める方法


    // 当月の1日の NSDate を求める
    NSDate *date = [NSDate date];
    NSDateComponents *dateComponents = [calendar components:NSCalendarUnitYear |
                                        NSCalendarUnitMonth  |
                                        NSCalendarUnitDay
                                         fromDate:date];
    [dateComponents setYear:dateComponents.year];
    [dateComponents setMonth:dateComponents.month];
    [dateComponents setDay:1];
    NSDate *firstDayOnThisMonth = [calendar dateFromComponents:dateComponents];

    // 当月1日の前日=前月の末日 の NSDate を求める
    NSDateComponents *dateComponents = [calendar components:NSCalendarUnitYear |
                                        NSCalendarUnitMonth  |
                                        NSCalendarUnitDay
                                         fromDate:firstDayOnThisMonth];
    [dateComponents setYear:dateComponents.year];
    [dateComponents setMonth:dateComponents.month];
    [dateComponents setDay:-1];
    NSDate *lastDayOnLastMonth = [calendar dateFromComponents:dateComponents];

2023年12月
     12
3456789
10111213141516
17181920212223
24252627282930
31      
android
iOS
web
アプリの著作権
ブロックチェーン/暗号技術
新しい社会
禅・大乗仏教
日本のなりたち

AppStoreにて無料公開中! ”システム手帳”で検索! - AppStoreへ iPad版 - iPhone版
デジタルトランスフォーメーションで新しい生活を提案!