日付時刻の情報や UIDatePickerを取得する「DCDate」クラス - iOS 7対応版

Objective-Cで UIDatePickerの取得や、年号日付時刻等の情報を取得/判別する「DCDate」クラスを iOS 7に対応しました。

iOS 7以降では、UIDatePickerの backgroundColorを指定しないと背景が透けて表示されるようでしたので、背景色を白に指定するコードを1行追加いたしました。

下記よりファイルのダウンロードが行えます。

ダウンロード

主な機能

  1. UIDatePickerの取得
  2. UIDatePickerの選択時刻と現在時刻の比較
  3. UIDatePickerで選択した日付と現在の日付の比較
  4. UIDatePickerで選択中の年号/月日/時分の取得
  5. 現在の年号/月日/時分秒の取得

使用方法

UIDatePickerの取得

1
2
3
4
UIDatePicker *datePicker = [DCDate picker:self rect:CGRectMake(0, self.view.frame.size.height - 210, 320, 210)
                        mode:UIDatePickerModeDateAndTime minuteInterval:1
                    dateText:@"2013-09-09 15:00:00" dateFormat:@"yyyy-MM-dd HH:mm:ss"
                      action:@selector(pickerChanged:)];

現在の日付とピッカーの日付を比較

1
BOOL isCurrentDate = [DCDate isCurrentDate];

現在時刻とピッカーの時刻を比較

1
BOOL isCurrentTime = [DCDate isCurrentTime];

UIDatePickerで選択中の年号/月日/時分の取得

1
2
3
4
5
NSInteger pickerYear = [DCDate pickerYear];
NSInteger pickerMonth = [DCDate pickerMonth];
NSInteger pickerDay = [DCDate pickerDay];
NSInteger pickerHour = [DCDate pickerHour];
NSInteger pickerMinute = [DCDate pickerMinute];

現在の年号/月日/時分秒の取得

1
2
3
4
5
6
NSInteger currentYear = [DCDate currentYear];
NSInteger currentMonth = [DCDate currentMonth];
NSInteger currentDay = [DCDate currentDay];
NSInteger currentHour = [DCDate currentHour];
NSInteger currentMinute = [DCDate currentMinute];
NSInteger currentSecond = [DCDate currentSecond];

ソースコード

DCDate.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#import <Foundation/Foundation.h>

@interface DCDate : NSObject

#pragma mark - public method
+ (UIDatePicker *)picker:(id)delegate rect:(CGRect)rect mode:(UIDatePickerMode)mode minuteInterval:(NSUInteger)minuteInterval dateText:(NSString *)dateText dateFormat:(NSString *)dateFormat action:(SEL)action;
+ (NSDate *)date:(NSString *)dateText dateFormat:(NSString *)dateFormat;
+ (NSString *)dateText:(NSString *)dateFormat;
+ (NSInteger)pickerYear;
+ (NSInteger)pickerMonth;
+ (NSInteger)pickerDay;
+ (NSInteger)pickerHour;
+ (NSInteger)pickerMinute;
+ (NSInteger)currentYear;
+ (NSInteger)currentMonth;
+ (NSInteger)currentDay;
+ (NSInteger)currentHour;
+ (NSInteger)currentMinute;
+ (NSInteger)currentSecond;
+ (NSDateComponents *)currentDateComponents;
+ (BOOL)isCurrentDate;
+ (BOOL)isCurrentTime;

@end

DCDate.m

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
#import "DCDate.h"

@implementation DCDate

static UIDatePicker *datePicker;

#pragma mark - Date Picker

// ピッカー取得
+ (UIDatePicker *)picker:(id)delegate rect:(CGRect)rect mode:(UIDatePickerMode)mode minuteInterval:(NSUInteger)minuteInterval dateText:(NSString *)dateText dateFormat:(NSString *)dateFormat action:(SEL)action
{
    // ピッカー初期化
    DCDate.datePicker = [[UIDatePicker alloc] initWithFrame:rect];

    // 背景色指定
    DCDate.datePicker.backgroundColor = [UIColor whiteColor];

    // 日付の表示モードを変更する
    DCDate.datePicker.datePickerMode = mode;

    // 何分刻みにするか
    DCDate.datePicker.minuteInterval = minuteInterval;

    // 初期時刻設定
    [DCDate.datePicker setDate:[DCDate date:dateText dateFormat:dateFormat]];

    // ピッカーの値が変更されたときに呼ばれるメソッドを設定
    [DCDate.datePicker addTarget:delegate action:action forControlEvents:UIControlEventValueChanged];

    return DCDate.datePicker;
}

// ピッカーに表示する時間取得
+ (NSDate *)date:(NSString *)dateText dateFormat:(NSString *)dateFormat
{
    NSString *dateString = dateText;
    NSDateFormatter *dateFormater = [[NSDateFormatter alloc] init];
    [dateFormater setDateFormat:dateFormat];
    NSDate *date = [dateFormater dateFromString:dateString];
    return date;
}

// ピッカーで指定されている時間をテキストで取得
+ (NSString *)dateText:(NSString *)dateFormat
{
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    dateFormatter.dateFormat = dateFormat;
    return [dateFormatter stringFromDate:DCDate.datePicker.date];
}

// ピッカーで指定されている年取得
+ (NSInteger)pickerYear
{
    NSDateFormatter *yearFormatter = [[NSDateFormatter alloc] init];
    [yearFormatter setLocale:[NSLocale currentLocale]];
    [yearFormatter setDateFormat:@"yyyy"];
    NSString *pickerYear = [yearFormatter stringFromDate:DCDate.datePicker.date];
    return [pickerYear intValue];
}

// ピッカーで指定されている月取得
+ (NSInteger)pickerMonth
{
    NSDateFormatter *monthFormatter = [[NSDateFormatter alloc] init];
    [monthFormatter setLocale:[NSLocale currentLocale]];
    [monthFormatter setDateFormat:@"MM"];
    NSString *pickerMonth = [monthFormatter stringFromDate:DCDate.datePicker.date];
    return [pickerMonth intValue];
}

// ピッカーで指定されている日付取得
+ (NSInteger)pickerDay
{
    NSDateFormatter *dayFormatter = [[NSDateFormatter alloc] init];
    [dayFormatter setLocale:[NSLocale currentLocale]];
    [dayFormatter setDateFormat:@"dd"];
    NSString *pickerDay = [dayFormatter stringFromDate:DCDate.datePicker.date];
    return [pickerDay intValue];
}

// ピッカーで指定されている時刻(時)取得
+ (NSInteger)pickerHour
{
    NSDateFormatter *hourFormatter = [[NSDateFormatter alloc] init];
    [hourFormatter setLocale:[NSLocale currentLocale]];
    [hourFormatter setDateFormat:@"HH"];
    NSString *pickerHour = [hourFormatter stringFromDate:DCDate.datePicker.date];
    return [pickerHour intValue];
}

// ピッカーで指定されている時刻(分)取得
+ (NSInteger)pickerMinute
{
    NSDateFormatter *minuteFormatter = [[NSDateFormatter alloc] init];
    [minuteFormatter setLocale:[NSLocale currentLocale]];
    [minuteFormatter setDateFormat:@"mm"];
    NSString *pickerMinute = [minuteFormatter stringFromDate:DCDate.datePicker.date];
    return [pickerMinute intValue];
}

#pragma mark - Utils

// 現在の月を取得
+ (NSInteger)currentYear
{
    NSDateComponents *currentTimeComponents = [DCDate currentDateComponents];
    return currentTimeComponents.year;
}

// 現在の月を取得
+ (NSInteger)currentMonth
{
    NSDateComponents *currentTimeComponents = [DCDate currentDateComponents];
    return currentTimeComponents.month;
}

// 現在の日付を取得
+ (NSInteger)currentDay
{
    NSDateComponents *currentTimeComponents = [DCDate currentDateComponents];
    return currentTimeComponents.day;
}

// 現在の時間を取得
+ (NSInteger)currentHour
{
    NSDateComponents *currentTimeComponents = [DCDate currentDateComponents];
    return currentTimeComponents.hour;
}

// 現在の分数を取得
+ (NSInteger)currentMinute
{
    NSDateComponents *currentTimeComponents = [DCDate currentDateComponents];
    return currentTimeComponents.minute;
}

// 現在の秒数を取得
+ (NSInteger)currentSecond
{
    NSDateComponents *currentTimeComponents = [DCDate currentDateComponents];
    return currentTimeComponents.second;
}

// 現在時刻のコンポーネント取得
+ (NSDateComponents *)currentDateComponents
{
    // 現在の時刻を取得
    NSDate *nowDate = [NSDate date];

    // 現在時刻のコンポーネント定義
    NSDateComponents *nowComponents;
    nowComponents = [[NSCalendar currentCalendar] components:(NSYearCalendarUnit |
                                                              NSMonthCalendarUnit |
                                                              NSDayCalendarUnit |
                                                              NSHourCalendarUnit |
                                                              NSMinuteCalendarUnit |
                                                              NSSecondCalendarUnit)
                                                    fromDate:nowDate];
    return nowComponents;
}

#pragma mark - Decision

// ピッカーで指定されている日付が現在と同じであるか
+ (BOOL)isCurrentDate
{
    return ([DCDate currentYear] == [DCDate pickerYear] &&
            [DCDate currentMonth] == [DCDate pickerMonth] &&
            [DCDate currentDay] == [DCDate pickerDay]);
}

// ピッカーで指定されている時刻が現在時刻であるか
+ (BOOL)isCurrentTime
{
    return ([DCDate currentHour] == [DCDate pickerHour] &&
            [DCDate currentMinute] == [DCDate pickerMinute]);
}

#pragma mark - setter/getter method

+ (void)setDatePicker:(UIDatePicker *)picker
{
    datePicker = picker;
}

+ (UIDatePicker *)datePicker
{
    return datePicker;
}

@end

サンプルソースコード

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//ピッカー配置
- (void)setDatePicker
{
    _datePicker = [DCDate picker:self rect:CGRectMake(0, self.view.frame.size.height - PICKER_HEIGHT, PICKER_WIDTH, PICKER_HEIGHT)
                            mode:UIDatePickerModeDateAndTime minuteInterval:PICKER_MINUTE_INTERVAL
                        dateText:@"2013-09-09 15:00:00" dateFormat:@"yyyy-MM-dd HH:mm:ss"
                          action:@selector(pickerChanged:)];
    [self.view addSubview:_datePicker];
}

//ピッカー変更時のイベント
- (void)pickerChanged:(UIDatePicker *)datePicker
{
    //ピッカーで選択した時刻が現在時刻であればアラート表示
    if ([DCDate isCurrentTime]) {
        [DCUtil showAlert:nil message:@"選択した時刻が現在時刻です" cancelButtonTitle:nil otherButtonTitles:@"OK"];
    }

    //ピッカーで選択した時刻が現在の日付であればアラート表示
    if ([DCDate isCurrentDate]) {
        [DCUtil showAlert:nil message:@"選択した日付が現在の日付です" cancelButtonTitle:nil otherButtonTitles:@"OK"];
    }
}

お薦めの参考書

本気ではじめるiPhoneアプリ作り Xcode 7.x+Swift 2.x対応
iOSアプリ開発をこれから始める方に最もお薦めな一冊です。解り辛い点は図解入りで解説されており、プログラミングの動作の仕組みから詳しく知ることができます。基本から通信処理まで押さえられており、アプリ公開の手順についても解説されています。

   このエントリーをはてなブックマークに追加

About

Masaki Hirokawa (@dolice_apps)

デザインエンジニア 廣川政樹の開発ブログ。Objective-Cや Javaなど iPhone/Androidアプリ開発に関する技術情報を掲載しています。

iPhone apps

  • リラックス・ヒーリング(無料)
  • 望みが叶う!引き寄せの法則アプリ(無料)
  • ミステリー - 怖い話や不思議な体験、都市伝説まとめ
  • 浮世絵壁紙 - 美しい日本画ギャラリー(無料)
  • 綺麗な壁紙HD iPhone 7/7 Plus/SE & iPod対応(無料)
  • クールな壁紙HD iPhone 7/7 Plus/SE & iPod対応(無料)

Android apps

  • 浮世絵壁紙 - 美しい日本画ギャラリー
  • 綺麗な高画質壁紙

Objective-C Classes

Tag Cloud

ActionScript(9) ActionScript3(7) Ad(4) Adfurikun(2) AdMob(9) Android(10) Animation(17) AppDelegate(3) ARC(1) ArrayList(1) AVAudioPlayer(4) AVAudioSession(1) AVFoundation(3) Banner(2) Bitmap(1) Camera(4) CGAffineTransform(4) CGBlendMode(2) CGContextRef(1) CGImageRef(1) Classes(44) CLLocationManager(1) ConnectivityManager(1) ContentResolver(1) CoreLocation(2) Delegate(3) Device(7) Display(1) DisplayMetrics(1) Download(101) Facebook(6) Foundation(72) Framework(2) Google Analytics(1) Handler(1) iAd(6) ImageView(1) In-AppPurchase(1) iOS(12) iOS 7(15) iOS 7.1(3) iOS 8(1) iPad(7) iPhone(21) iPhone 6(4) Java(7) JavaScript(2) LINE(4) Localize(1) Magazine(1) MediaStore(1) MFComposeViewController(1) Nend(1) NetworkInfo(1) NSArray(23) NSCalendar(3) NSData(2) NSDate(7) NSDateComponents(2) NSDateFormatter(2) NSDictionary(12) NSEnumerator(1) NSIndexSet(1) NSInteger(6) NSMutableArray(17) NSMutableDictionary(5) NSMutableOrderedSet(7) NSMutableString(4) NSMutableURLRequest(1) NSNotificationCenter(1) NSNumber(1) NSObject(1) NSOrderedSet(7) NSRange(2) NSSelectorFromString(1) NSSet(6) NSString(19) NSTimer(4) NSTimeZone(1) NSURL(7) NSURLConnection(1) NSURLRequest(2) NSUserDefaults(7) NSXMLParser(2) Objective-C(222) PHP(1) Products(14) QuartzCore(3) RSS(2) Runnable(1) Sample(51) Screensaver(9) SDK(2) ShareCompat(1) Social(10) StoreKit(1) Twitter(6) UIAccelerometer(3) UIActionSheet(1) UIActivityIndicator(1) UIActivityIndicatorView(3) UIActivityViewController(1) UIAlertView(5) UIApplication(7) UIButton(4) UIColor(3) UIDatePicker(5) UIDevice(6) UIDeviceOrientation(1) UIEvent(6) UIImage(15) UIImagePickerController(4) UIImageView(12) UIKit(58) UILabel(7) UINavigationBar(4) UINavigationItem(1) UIPasteboard(4) UIScreen(1) UIScrollBar(1) UIScrollView(1) UISlider(3) UIStoryboardSegue(3) UISwitch(1) UITabBar(3) UITableView(4) UITextField(2) UIView(11) UIViewAnimationTransition(1) UIViewController(4) UIWebView(5) WindowManager(1) Xcode(48) Xcode 5(8) Xcode 5.1(2)