TimeIntervalsincedate مشكلة
-
20-09-2019 - |
سؤال
الملاذ الأخير هذا لأنني لا أستطيع لحياة لي أن أعمل!
أقوم بتعيين تاريخ عندما يتم إغلاق تطبيقي (باستخدام ApplicationWillRight) في الإعدادات الافتراضية للمستخدم
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSDate *timeClosed = [[NSDate alloc] init];
[defaults setObject: timeClosed forKey:@"svdTimeClosedApp"];
ثم عند إطلاق التطبيق ، أريد مقارنة هذه المرة باستخدام
NSDate *timeSaved = svdTimeClosedApp;
NSDate *timeNow = [[NSDate alloc] init];
double timeInterval = [timeSaved timeIntervalSinceDate:timeNow];
NSLog(@"time now = %@, time saved = %@, time diff = %@", timeNow, timeSaved, [NSString stringWithFormat:@"%d",timeInterval]);
حاولت إخراج هذا إلى نافذة السجل أتوقع رؤية سلسلة منسقة بشكل جيد حوالي 20 ثانية. المشكلة هي أنها تخرج مثل 2047868928!
أيه أفكار؟!
(إخراج نافذة السجل أدناه)
time now = 2009-12-19 20:54:02 +0000, time saved = 2009-12-19 20:48:29 +0000, time diff = 2047868928
شكرا على اي مساعدة!
المحلول
هناك بعض القضايا. أولا ، في الخاص بك stringWithFormat:
تريد استخدام ٪ g ، وليس ٪ d ، ٪ d لقيم عدد صحيح. أيضا ، يجب أن تفعل [timeNow timeIntervalSinceDate:timeSaved]
ستمنحك مكالمتك الحالية قيمة سلبية.
نصائح أخرى
إليك الرمز الذي أستخدمه.
في تطبيقي ، عندما يقوم المستخدم بمزامنة بعض البيانات ، أقوم بتسجيل التاريخ/الوقت الحالي باستخدام هذا الرمز:
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[prefs setObject:[NSDate date] forKey:@"LastSyncDate"];
[prefs synchronize];
ثم ، إذا أردت أن أرى عدد الأيام التي كانت فيها منذ آخر مرة ، يمكنني استخدام هذا:
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSDate* dateOfLastSync = [prefs objectForKey:@"LastSyncDate"];
if (dateOfLastSync != nil)
{
NSDate *timeNow = [NSDate date];
double SECONDS_TO_DAY = 60 * 60 * 24;
int timeIntervalInDays = (int)([timeNow timeIntervalSinceDate:dateOfLastSync] / SECONDS_TO_DAY);
NSLog(@"The last sync was %d days ago.", timeIntervalInDays);
}
أتمنى أن يساعدك هذا.
مايك
أعتقد أن لديك timeInterval
الحساب للخلف ، أليس كذلك؟ أعتقد أنك تريد أن تقول ذلك عكس.
double timeInterval = [timeNow timeIntervalSinceDate:timeSaved];