मुझे कोड दोके बीच दिनों के अंतर की गणना करने के लिए मिला।किसी विशेष टाइमज़ोन में दो एनएसडीएटी तिथियों के बीच दिनों की संख्या प्राप्त करें
-(NSInteger)daysWithinEraFromDate:(NSDate *) startDate toDate:(NSDate *) endDate
{
NSCalendar *gregorian = [[NSCalendar alloc]
initWithCalendarIdentifier:NSGregorianCalendar];
NSInteger startDay=[gregorian ordinalityOfUnit:NSDayCalendarUnit
inUnit: NSEraCalendarUnit forDate:startDate];
NSInteger endDay=[gregorian ordinalityOfUnit:NSDayCalendarUnit
inUnit: NSEraCalendarUnit forDate:endDate];
return endDay-startDay;
}
इस विधि एक समस्या है: यह समय क्षेत्र बात पर विचार नहीं कर सकते
मैं एक विधि लिखें। यहां तक कि मैं इस तरह एक पंक्ति जोड़ें:
[gregorian setTimeZone:[NSTimeZone localTimeZone]];
मेरे परीक्षण कोड इस तरह है:
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSString *strDate = @"2012-09-03 23:00:00";
NSDate *dateStart = [dateFormat dateFromString:strDate];
strDate = @"2012-09-04 01:00:00";
NSDate *dateEnd = [dateFormat dateFromString:strDate];
NSLog(@"Days difference between %@ and %@ is: %d days",[dateFormat stringFromDate:dateStart],[dateFormat stringFromDate:dateEnd],[self daysWithinEraFromDate:dateStart toDate:dateEnd]);
परिणाम है: 2012-09-03 23:00 के बीच
दिन का अंतर : 00 और 2012-09-04 01:00:00 है: 0 दिन
मैं मिडनिग की संख्या के परिणामस्वरूप 1 दिन प्राप्त करना चाहता हूं दो तिथियों के बीच hts। मेरा टाइमज़ोन जीएमटी +8 है। लेकिन यह गणना जीएमटी पर आधारित है, इसलिए मुझे गलत दिन संख्या मिलती है। क्या इस समस्या के समाधान का कोई तरीका है? धन्यवाद।
Scott Lemmon की विधि मेरी समस्या का समाधान कर सकती है। मैं इस तरह मेरे कोड को फिर से लिखने:
-(NSInteger)daysWithinEraFromDate:(NSDate *) startDate toDate:(NSDate *) endDate
{
NSCalendar *gregorian = [[NSCalendar alloc]
initWithCalendarIdentifier:NSGregorianCalendar];
[gregorian setTimeZone:[NSTimeZone localTimeZone]];
NSDate *newDate1 = [startDate dateByAddingTimeInterval:[[NSTimeZone localTimeZone] secondsFromGMT]];
NSDate *newDate2 = [endDate dateByAddingTimeInterval:[[NSTimeZone localTimeZone] secondsFromGMT]];
NSInteger startDay=[gregorian ordinalityOfUnit:NSDayCalendarUnit
inUnit: NSEraCalendarUnit forDate:newDate1];
NSInteger endDay=[gregorian ordinalityOfUnit:NSDayCalendarUnit
inUnit: NSEraCalendarUnit forDate:newDate2];
return endDay-startDay;
}
हाय, आपके उत्तर के लिए धन्यवाद। मैंने बस समय की जानकारी को अनदेखा करने के बारे में सोचा। मैंने इसे अपने कोड में किया है। लेकिन आपका पहला समाधान शानदार है! मुझे लगता है कि यह इस समस्या को हल करने का एक और सटीक तरीका है। मैंने इसे अपने कोड में आजमाया है, मैं उन्हें दिखाऊंगा। – Vigor