كيف يمكنني الحصول على التاريخ الحالي في الكاكاو

StackOverflow https://stackoverflow.com/questions/1070354

  •  21-08-2019
  •  | 
  •  

سؤال

أنا بدأت النامية فون مثل أنا أبحث في مختلف الدروس على الانترنت وكذلك محاولة بعض الأشياء المختلفة من نفسي.حاليا أنا أحاول إنشاء العد التنازلي حتى منتصف الليل.للحصول على عدد من ساعة ، دقيقة ، ثانية ، أفعل التالية (التي وجدت في مكان ما):

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 * الآن، انها مجرد مسألة تفضيل. من وجهة نظر المترجم، لا شيء يتغير.

نصائح أخرى

لديك مشاكل مع دائرة الرقابة الداخلية 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/01/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

أعتقد أن هذا قد المزايا التالية:

  1. لا مباشرة تخصيص الذاكرة.
  2. ثانية هو مزدوج بدلا من عدد صحيح.
  3. لا رسالة المكالمات.
  4. بشكل أسرع.

و// يمكنك الحصول على وقت / زمن الحالي مع التعليمات البرمجية التالية:

    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 متغير. ما هو الفرق في اثنين وماذا كنت تستخدم أحد مقابل الآخر؟

والمترجم لا يهمني، ولكن يمكن وضع النجمة قبل الفضاء تكون مضللة. وهنا بلدي على سبيل المثال:

int* a, b;

ما هو نوع من b؟

إذا كنت تفكر int *، كنت على خطأ. انها int فقط.

والطريقة الأخرى يجعل هذا أكثر وضوحا قليلا عن طريق الحفاظ على * بجوار متغير أنه ينتمي إلى:

int *a, b;

وبطبيعة الحال، هناك نوعان من الطرق التي هي أكثر وضوحا من ذلك:

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;

وتفقد الدقة subsecond مع المدلى بها من NSTimeInterval إلى int، ولكن هذا لا ينبغي أن المسألة.

NSDate* now و NSDate *now هي نفس الشيء:مؤشر إلى NSDate الكائن.

ربما كنت ترغب في استخدام descriptionWithCalendarFormat:التوقيت:الإعدادات المحلية: بدلا من dateWithCalendarFormat: — هذا الأخير بإرجاع NSCalendarDate التي يقول الأطباء ومن المقرر أن إهمال في بعض نقطة.

والملصق الأصلي - فإن الطريقة التي كنت تحديد ثوان حتى منتصف الليل لا تعمل على اليوم الذي يبدأ التوقيت الصيفي أو ينتهي. وفيما يلي جزء من التعليمات البرمجية التي تبين كيفية القيام بذلك ... انها سوف تكون في عدد من ثانية (على NSTimeInterval)؛ يمكنك القيام به تقسيم / معامل / وغيرها لننكب على كل ما تحتاجه.

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);

وليس هناك فرق في الموقع من العلامة النجمية (في في C، والتي تقوم الكائنات C، فإنه لا يهم). هو محض تفضيل (نمط).

واستغرق الأمر مني بعض الوقت لتحديد السبب في أن يعمل التطبيق عينة ولكن الألغام لا.

والمكتبة (Foundation.Framework) أن المؤلف يشير إلى هي مكتبة النظام (من OS) حيث الإستراحة فون (أستخدمه 3.0) لا تدعم أي أكثر من ذلك.

وذلك لتطبيق نموذج (من about.com، http://www.appsamuck.com/day1 هتمل ) يعمل ولكن لنا لا.

CFGregorianDate currentDate = CFAbsoluteTimeGetGregorianDate(CFAbsoluteTimeGetCurrent(), CFTimeZoneCopySystem());
countdownLabel.text = [NSString stringWithFormat:@"%02d:%02d:%2.0f", currentDate.hour, currentDate.minute, currentDate.second];

وكان Mark حق هذا الرمز هو أكثر كفاءة لإدارة مواعيد ساعات دقيقة وثانية. ولكن نسي @ في بداية إعلان شكل سلسلة.

+ (NSString *)displayCurrentTimeWithAMPM 
{
    NSDateFormatter *outputFormatter = [[NSDateFormatter alloc] init];
    [outputFormatter setDateFormat:@"h:mm aa"];

    NSString *dateTime = [NSString stringWithFormat:@"%@",[outputFormatter stringFromDate:[NSDate date]]];

    return dateTime;
}

وعودة 03:33

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top