社員ブログ
HOME  社員ブログ

アーカイブ

‘iOS’ カテゴリ

[iOS]日付の足し算

2014年05月30日 9時00分09秒

こんにちは、ピーターです。

iOSで日付の足し算や引き算を行うメソッドを2つご紹介します。

ひとつ目はNSDateクラスのdateByAddingTimeInterval:メソッドです。

- (id)dateByAddingTimeInterval:(NSTimeInterval)seconds

指定した秒数をNSDateオブジェクトに足します。
引き算したい時はマイナスの秒数を指定します。

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

NSInteger secondsOfDay = 60 * 60 * 24; // 1日の秒数
NSDate *today = [formatter dateFromString:@"2014-05-29 19:30:00"];
NSDate *tommorow = [today dateByAddingTimeInterval:secondsOfDay];
NSDate *yesterday = [today dateByAddingTimeInterval:-secondsOfDay];

NSLog(@"%@", [formatter stringFromDate:today]);
// > 2014-05-29 19:30:00

NSLog(@"%@", [formatter stringFromDate:tommorow]);
// > 2014-05-30 19:30:00

NSLog(@"%@", [formatter stringFromDate:yesterday]);
// > 2014-05-28 19:30:00

この方法は1日後のように、秒数で指定できるものには向いているのですが、1ヶ月後や1年後といった足し算には不向きです。

そこでふたつ目は、NSCalendarクラスのdateByAddingComponents:toDate:options:メソッドです。

- (NSDate *)dateByAddingComponents:(NSDateComponents *)comps toDate:(NSDate *)date options:(NSUInteger)opts

足したい月数や年数をNSDateComponentsオブジェクトで指定します。

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

NSDate *today = [formatter dateFromString:@"2014-05-29 19:30:00"];

// 1年2ヶ月後を指定
NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setYear:1];
[comps setMonth:2];

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *date = [calendar dateByAddingComponents:comps toDate:today options:0];

NSLog(@"%@", [formatter stringFromDate:today]);
// > 2014-05-29 19:30:00

NSLog(@"%@", [formatter stringFromDate:date]);
// > 2015-07-29 19:30:00

ちなみに、NSDateオブジェクトから年や月などを取得したい場合、NSDateオブジェクトをNSDateComponentsオブジェクトに変換すると便利です。

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

NSDate *today = [formatter dateFromString:@"2014-05-29 19:30:00"];

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSUInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSWeekdayCalendarUnit;
NSDateComponents *comps = [calendar components:unitFlags fromDate:today];

NSLog(@"%ld", (long)comps.year);
// > 2014

NSLog(@"%ld", (long)comps.month);
// > 5

NSLog(@"%ld", (long)comps.day);
// > 29

NSLog(@"%ld", (long)comps.weekday);
// > 5

NSDateComponentsオブジェクトからNSDateオブジェクトに変換することもできます


NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setYear:2014];
[comps setMonth:5];
[comps setDay:29];

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *today = [calendar dateFromComponents:comps];

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

NSLog(@"%@", [formatter stringFromDate:today]);
// > 2014-05-29 00:00:00

iOS, 社員:ピーター

Beaconが見つからない場合の対処法

2014年05月27日 21時00分47秒

こんにちは、ピーターです。

アプリックスの MyBeacon ToolBeacon が見つからない場合の対処法をご紹介します。

実は画面にちゃんと書いてあります。

IMG_2385

設定するMyBeaconの電源投入→「サーチ開始」ボタンをタップ〜サーチ終了→MyBeaconをリストから選択の手順を、30秒以内に行ってください。

MyBeaconが見つかりませんでした。 設定を行うMyBeaconの電源を再投入して、「サーチ開始」をタップしてください。

私自身が見落とし、なんで見つからないのかな〜?と悩んでいました。
要するにコンセントから抜き差しするなどして給電し直し、すぐにサーチ開始ボタンを押すと見つかります。

自作のiBeaconアプリで受信できない時は、iOSデバイス(iPhoneなど)を再起動すると受信できるようになる場合があります。

iOS, 社員:ピーター

[iOS7]iBeaconを試してみました

2014年05月27日 9時00分28秒

こんにちは、ピーターです。

先日購入したiOS位置情報プログラミングという本でiBeaconを学びました。

Beacon情報の発信にはMacを使った方法がありました。

どれもうまくいきました。

そしたら実物も欲しくなったので、税込み送料込みで1,800円と安かったこちらを購入しました。

MyBeacon™シリーズ USB給電型Beacon-StarterKit | 株式会社アプリックス
http://www.aplix.co.jp/?page_id=9031

IMG_2378

最初はポータブル充電器に差してみたのですが、なぜかすぐに電波を受信できなくなってしまいます。

IMG_2381

コンセントに差してみたところ、安定して受信できています。

IMG_2384

iBeaconを使って何か作ってみたいと思います。

iOS, 社員:ピーター