どうやっていけばいいですか?現在の日付にココア
-
21-08-2019 - |
質問
している方が引っ越した開発を開始したiPhoneなどを見てい異なるチュートリアルのオンラインなどいろいろなものは出した。現在、私が作り出してしまおうというものカウントダウンをご提供しております。の数時間、分、秒、以下の(見どこか):
NSDate* now = [NSDate date];
int hour = 23 - [[now dateWithCalendarFormat:nil timeZone:nil] hourOfDay];
int min = 59 - [[now dateWithCalendarFormat:nil timeZone:nil] minuteOfHour];
int sec = 59 - [[now dateWithCalendarFormat:nil timeZone:nil] secondOfMinute];
countdownLabel.text = [NSString stringWithFormat:@"%02d:%02d:%02d", hour, min,sec];
しかしながら、場所を使ってい -dateWithCalendarFormat:timeZone:
を取得します以下のようなエラー:
warning: 'NSDate' may not respond to '-dateWithCalendarFormat:timeZone:'
(Messages without a matching method signature will be assumed to return 'id' and accept '...' as arguments.)
warning: no '-hourOfDay' method found
error: invalid operands to binary - (have 'int' and 'id')
このようなも簡単です。と思欠?
また、って異なる場所で、異なる時、アスタリスク(*)に位置から後の時間 NSDate* now
又は直前に変数 NSDate *now
.何か違いはあるのか使いに一対のですか?
解決
次を使用する必要があります:
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *dateComponents = [gregorian components:(NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate:yourDateHere];
NSInteger hour = [dateComponents hour];
NSInteger minute = [dateComponents minute];
NSInteger second = [dateComponents second];
[gregorian release];
今NSDate *とNSDate *の間に違いは、それは好みの問題だ、今はありません。コンパイラの観点からは、何も変わりません。
他のヒント
あなたは、iOS 4.2に問題がありますか? このコードを使用します:
NSDate *currDate = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:@"dd.MM.YY HH:mm:ss"];
NSString *dateString = [dateFormatter stringFromDate:currDate];
NSLog(@"%@",dateString);
- > 2011年1月20日10時36分02秒
も利用できます:
CFGregorianDate currentDate = CFAbsoluteTimeGetGregorianDate(CFAbsoluteTimeGetCurrent(), CFTimeZoneCopySystem());
countdownLabel.text = [NSString stringWithFormat:@"%02d:%02d:%02.0f", currentDate.hour, currentDate.minute, currentDate.second];
CFRelease(currentDate); // Don't forget this! VERY important
と思うことは、次のような特長があります。
- 直接的なメモリ割り当て.
- 秒でダブルではなく整数となります。
- ないメッセージ発信します。
- になります。
//次のコードを使用して、現在の日付/時刻を取得することができます:
NSDate* date = [NSDate date];
NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
NSTimeZone *destinationTimeZone = [NSTimeZone systemTimeZone];
formatter.timeZone = destinationTimeZone;
[formatter setDateStyle:NSDateFormatterLongStyle];
[formatter setDateFormat:@"MM/dd/yyyy hh:mma"];
NSString* dateString = [formatter stringFromDate:date];
これを置き換えます:
NSDate* now = [NSDate date];
int hour = 23 - [[now dateWithCalendarFormat:nil timeZone:nil] hourOfDay];
int min = 59 - [[now dateWithCalendarFormat:nil timeZone:nil] minuteOfHour];
int sec = 59 - [[now dateWithCalendarFormat:nil timeZone:nil] secondOfMinute];
countdownLabel.text = [NSString stringWithFormat:@"%02d:%02d:%02d", hour, min,sec];
これによります:
NSDate* now = [NSDate date];
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *dateComponents = [gregorian components:(NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate:now];
NSInteger hour = [dateComponents hour];
NSInteger minute = [dateComponents minute];
NSInteger second = [dateComponents second];
[gregorian release];
countdownLabel.text = [NSString stringWithFormat:@"%02d:%02d:%02d", hour, minute, second];
また、私は別の場所で気づいたと、異なる時間にアスタリスク(
の違いは何ですか*
)は、変数NSDate* now
前の時間NSDate *now
または直後に右のいずれかに配置されます。 2、なぜあなたは他の対1を使用するのでしょうか?
コンパイラは気にしませんが、スペースの前にアスタリスクを置くことは誤解を招くことができます。ここに私の例があります:
int* a, b;
b
の種類は何ですか?
int *
を推測した場合は、、あなたは間違っています。それはちょうどint
です。
他の方法は、次のことが属する変数へ*保つことで、これは少しより明確になります
int *a, b;
もちろん、それよりもさらに明確にされている2つの方法があります:
int b, *a;
int *a;
int b;
次の線に沿って何かをする必要があります:
NSDate *now = [NSDate date];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:NSHourCalendarUnit fromDate:now];
NSLog(@"%d", [components hour]);
のように。
ここでは別の方法です。
NSDate *now = [NSDate date];
//maybe not 100% approved, but it works in English. You could localize if necessary
NSDate *midnight = [NSDate dateWithNaturalLanguageString:@"midnight tomorrow"];
//num of seconds between mid and now
NSTimeInterval timeInt = [midnight timeIntervalSinceDate:now];
int hours = (int) timeInt/3600;
int minutes = ((int) timeInt % 3600) / 60;
int seconds = (int) timeInt % 60;
あなたはint型へNSTimeIntervalのキャストで秒以下の精度を失うが、それは問題ではないはず。
NSDate* now
や NSDate *now
同じもの:ポインタをNSDateオブジェクトです。
おそらく使いたい descriptionWithCalendarFormat:タイムゾーン:ロケール: よ dateWithCalendarFormat: —後を返しますNSCalendarDateのdocsったところにセブンイレブンがある予定推奨されていないのです。
オリジナルポスター - 夏時間が開始または終了するときに、深夜までの秒を決定している方法は当日に動作しません。ここでそれを行う方法を示したコードの塊だ...それは秒(NSTimeInterval)の数になります。あなたは何が必要に取り掛かるために分裂/モジュラスの/ etcを行うことができます。
NSDateComponents *dc = [[NSCalendar currentCalendar] components:NSDayCalendarUnit|NSMonthCalendarUnit|NSYearCalendarUnit fromDate:[NSDate date]];
[dc setDay:dc.day + 1];
NSDate *midnightDate = [[NSCalendar currentCalendar] dateFromComponents:dc];
NSLog(@"Now: %@, Tonight Midnight: %@, Hours until midnight: %.1f", [NSDate date], midnightDate, [midnightDate timeIntervalSinceDate:[NSDate date]] / 60.0 / 60.0);
(OBJの-Cは、それは問題ではないに基づいていますC中で、)アスタリスクの位置の違いはありません。それは純粋に好み(スタイル)です。
これはサンプルアプリケーションが動作しますが、地雷がいない理由を見つけるために私にしばらく時間がかかっています。
著者はを参照しているライブラリ(Foundation.Framework)は、iPhoneのSDKは(私は3.0を使用しています)、それ以上をサポートしていないシステム(OSから)ライブラリです。
about.com、 http://www.appsamuck.com/day1からしたがってサンプルアプリケーション( .htmlをの)動作しますが、我々にはありません。
CFGregorianDate currentDate = CFAbsoluteTimeGetGregorianDate(CFAbsoluteTimeGetCurrent(), CFTimeZoneCopySystem());
countdownLabel.text = [NSString stringWithFormat:@"%02d:%02d:%2.0f", currentDate.hour, currentDate.minute, currentDate.second];
マークが右、このコードは、日付を時間の分と秒を管理するために、はるかに効率的であるでした。しかし、彼はフォーマット文字列の宣言の先頭に@を忘れてしまっています。
+ (NSString *)displayCurrentTimeWithAMPM
{
NSDateFormatter *outputFormatter = [[NSDateFormatter alloc] init];
[outputFormatter setDateFormat:@"h:mm aa"];
NSString *dateTime = [NSString stringWithFormat:@"%@",[outputFormatter stringFromDate:[NSDate date]]];
return dateTime;
}
リターン3:33