2013-03-01 10 views
17

कोई भी जानता है कि एनएसडीएट के लिए न्यूनतम और अधिकतम संभव मूल्य क्या हैं?एनएसडीएट न्यूनतम और अधिकतम संभावित मूल्य

+0

कृपया बताएं कि आपको किस परिदृश्य को जानने की आवश्यकता है। –

+0

इसकी आवश्यकता क्या है ??? – Melbourne

+1

===> डब्ल्यूडब्ल्यूडीसी 2011 वीडियो "सत्र 117 - कैलेंडर गणना करना" (5 9: 11) –

उत्तर

1

अधिकतम होना चाहिए: 5828963-12-20 00:00:00 +0000 क्योंकि

NSDate *dateSinceNow = [NSDate dateWithTimeIntervalSinceNow:DBL_MAX]; 
NSDate *dateSindeReferenceDate = [NSDate dateWithTimeIntervalSinceReferenceDate:DBL_MAX]; 
NSLog(@"min: %@, max: %@", dateSinceNow, dateSindeReferenceDate); 

में ही है।

न्यूनतम मैं इस मिलता है: 0001-01-01 00:00:00 +0000

इस कारण मैं क्या मिलता है जब मैं कोशिश:

NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
[df setDateFormat:@"yyyy-MM-dd hh:mm:ss"]; 
[df setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; 
NSDate *myDate = [df dateFromString: @"0001-01-01 00:00:00"]; 
NSLog(@"%@", myDate); 

लेकिन इस उठाई के रूप में वर्तमान युग है davedelong

से बाहर तो यदि आप पहले उदाहरण का प्रयास करते हैं - DBL_MAX आपको मिलता है: 41221-07--2147483641 00:00:00 +0000। पता नहीं यह है कि क्या युग ...

+0

मेरा मानना ​​है कि आप एक ही समस्या का सामना कर रहे हैं जिसके कारण मुझे यह प्रश्न पूछना पड़ा। मुझे लगता है कि न्यूनतम संभव दिनांक मूल्य 0001-01-01 00:00:00 है, हालांकि जब आप NSDateFormatter का उपयोग करते हैं तो तिथि आपके टाइमज़ोन द्वारा छोड़ी जा रही है। निम्नलिखित के साथ पुनः प्रयास करें: [डीएफ सेटटाइमज़ोन: [एनएसटीआईएमज़ोन समय ज़ोनफॉर सेकेंडफ्रॉमजीएमटी: 0]]। –

+0

सेटिंग टाइमज़ोन मुझे 0001-01-01 00:00:00 +0000 भी – peko

+3

यह केवल आधा सही है। अधिकतम बिट सही है, लेकिन न्यूनतम के लिए आपका तर्क त्रुटिपूर्ण है। वर्तमान युग * (सीई) के लिए यह न्यूनतम * है। 'एनएसडीएटी 'बीसीई तिथियों को व्यक्त करने में पूरी तरह से सक्षम है। जो आप खोज रहे हैं वह है [एनएसडीएटी तिथि विथटाइम इंटरवलस 1 9 70: -DBL_MAX] ' –

2

संपादित उत्तर:

मैंने सोचा था कि मुझे पता चला था न्यूनतम दिनांक मान 0001-01-01 00:00:00 + 0000 था (नीचे मेरी कोड दिया गया है) हालांकि के रूप में टिप्पणी में बताया गया है नीचे, यह केवल वर्तमान युग (यानी एडी) के लिए है। एनएसडीएटी मूल्य इससे कम हो सकता है लेकिन एनएसएलओजी के परिणामस्वरूप आप जो देखते हैं वह वह नहीं हो सकता है जो आप उम्मीद कर रहे हैं, इसलिए मैं यहां अन्य उत्तरों को देखने और मेरी अज्ञानता को अनदेखा करने की सलाह दूंगा।

मूल उत्तर:

मुझे विश्वास है कि मैं कम से कम तिथि मूल्य की खोज की है 0001-01-01 00:00:00 + 0000

है जब NSLog'ing और पार्स मान यह सुनिश्चित करने तुम बहुत सावधान रहना चाहिए कि आपके समय क्षेत्र 'isn तारीख मूल्य थोड़ा सा skewing।

मैं कोशिश करते हैं और नीचे का प्रदर्शन करेंगे:

NSDateFormatter *dateFormatter1 = [[NSDateFormatter alloc] init]; 
[dateFormatter1 setDateFormat:@"yyyy-MM-dd hh:mm:ss z"]; 

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

NSDateFormatter *dateFormatter3 = [[NSDateFormatter alloc] init]; 
[dateFormatter3 setDateFormat:@"yyyy-MM-dd HH:mm:ss z"]; 
[dateFormatter3 setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; 

NSDate *date1 = [NSDate dateWithTimeIntervalSince1970:-62135596800]; 
NSLog(@"date1 = %@", date1); 
NSLog(@"date1 via dateFormatter1 = %@", [dateFormatter1 stringFromDate:date1]); 
NSLog(@"date1 via dateFormatter2 = %@", [dateFormatter2 stringFromDate:date1]); 
NSLog(@"date1 via dateFormatter3 = %@", [dateFormatter3 stringFromDate:date1]); 

NSDate *date2 = [NSDate dateWithTimeIntervalSince1970:-62135596800 - 100]; // The - 100 makes no difference 
NSLog(@"date2 = %@", date2); 
NSLog(@"date2 via dateFormatter1 = %@", [dateFormatter1 stringFromDate:date2]); 
NSLog(@"date2 via dateFormatter2 = %@", [dateFormatter2 stringFromDate:date2]); 
NSLog(@"date2 via dateFormatter3 = %@", [dateFormatter3 stringFromDate:date2]); 

यह (मेरे iPad पर अपनी विशेष समय क्षेत्र को देखते हुए) निम्न उत्पादन में परिणाम है:

date1 = 0001-01-01 00:00:00 +0000 
date1 via dateFormatter1 = 0001-12-31 11:58:45 GMT-00:01:15 
date1 via dateFormatter2 = 0001-12-31 23:58:45 GMT-00:01:15 
date1 via dateFormatter3 = 0001-01-01 00:00:00 GMT 
date2 = 0001-12-31 23:58:20 +0000 
date2 via dateFormatter1 = 0001-12-31 11:57:05 GMT-00:01:15 
date2 via dateFormatter2 = 0001-12-31 23:57:05 GMT-00:01:15 
date2 via dateFormatter3 = 0001-12-31 23:58:20 GMT 

नोट DATE2 और कैसे एक अतिरिक्त 100 सेकंड घटाकर तिथि के मूल्य को कम नहीं किया लेकिन वास्तव में इसे बढ़ाना प्रतीत होता था। स्पष्ट रूप से एनएसडीएटी के कामकाज के आंतरिक तरीके के बारे में कुछ अनोखा, समय 100 सेकंड तक समायोजित किया जाता है लेकिन यह दिन और महीने को छोड़ देता है क्योंकि यह कम नहीं हो सकता है?

+1

यदि आप कोशिश करते हैं [NSDate dateWithTimeIntervalSinceNow: - DBL_MAX] आपको 41221-07--2147483641 00:00:00 +0000 .. – peko

+0

-1 गलत कुछ मिलता है। वर्तमान युग के लिए यह केवल न्यूनतम तारीख है, कुल मिलाकर न्यूनतम तिथि नहीं। –

+0

पॉइंटर के लिए ठीक है, मैंने अपना जवाब अपडेट कर लिया है। तिथियां मेरे दिमाग को उड़ाती हैं और NSDateFormatter वास्तव में मामलों की मदद नहीं करता है। –

40

[NSDate distantFuture] और [NSDate distantPast] का उपयोग करें।

+1

+1 ऐप्पल इस तरह के कठिन प्रश्नों के लिए इन तरीकों को प्रदान करता है। – 9dan

+0

उन लोगों के लिए, जो ओपी की तरह हैं, नेट डेटटाइम मानों को परिवर्तित कर रहे हैं, और डेटटाइम का समर्थन करना चाहते हैं। मिनवैल्यू और डेटटाइम। मैक्सवेल्यू, तो ये स्विफ्ट विधियां ब्याज की हो सकती हैं: http://stackoverflow.com/a/41625877/253938 – RenniePet

संबंधित मुद्दे