मुझे अपने ऐप में पोस्ट की तारीख को उपयोगकर्ता को प्रदर्शित करने की ज़रूरत है, अभी मैं इसे इस प्रारूप में करता हूं: "शुक्र, 25 मई"। मैं "2 घंटे पहले" जैसे कुछ पढ़ने के लिए एनएसडीएट को कैसे प्रारूपित करूं? इसे और अधिक उपयोगकर्ता के अनुकूल बनाने के लिए।आईओएस - दोस्ताना एनएसडीएटी प्रारूप
उत्तर
NSDateFormatter
ऐसी चीजें नहीं कर सकते हैं; आपको अपने नियम स्थापित करने की आवश्यकता होगी।
- (NSString *)formattedDate:(NSDate *)date
{
NSTimeInterval timeSinceDate = [[NSDate date] timeIntervalSinceDate:date];
// print up to 24 hours as a relative offset
if(timeSinceDate < 24.0 * 60.0 * 60.0)
{
NSUInteger hoursSinceDate = (NSUInteger)(timeSinceDate/(60.0 * 60.0));
switch(hoursSinceDate)
{
default: return [NSString stringWithFormat:@"%d hours ago", hoursSinceDate];
case 1: return @"1 hour ago";
case 0:
NSUInteger minutesSinceDate = (NSUInteger)(timeSinceDate/60.0);
/* etc, etc */
break;
}
}
else
{
/* normal NSDateFormatter stuff here */
}
}
ताकि 'मिनट एक्स पहले' तिथि, जो आमतौर पर एक दिन हो जाएगा से 24 घंटे तक प्रिंट या 'एक्स घंटे पहले' के लिए दिया गया है: मैं की तरह कुछ लगता है।
mattt जो भी AFNetworking बनाया द्वारा बनाया गया FormaterKit https://github.com/mattt/FormatterKit
पर एक नजर डालें।
यह अयस्क अपवॉट्स प्राप्त करना चाहिए, यह एक महान डेवलपर द्वारा बनाई गई एक महान किट और इसका उपयोग करना इतना आसान है। –
एक लाख तरीकों से आप ऐसा कर सकता है के बारे में हैं, लेकिन यहाँ एक त्वरित एक है:
NSString* hoursAgo = [NSString stringWithFormat:@"%.0lf hours ago", fabs([date timeIntervalSinceNow]/3600.0)]
बेशक
, इस जाँच नहीं करता है कि date
अतीत से वास्तव में है, कुछ भी नहीं है लेकिन घंटे, आदि। लेकिन, आपको शायद विचार मिल जाएगा।
timeIntervalSinceNow
किसी दिए गए दिनांक के बाद से कितने सेकंड बीत चुके हैं, भविष्य में सकारात्मक संख्याएं और ऋणात्मक संख्याएं अतीत में एक तिथि होने के साथ लौटती हैं। इसलिए, हमें कितने सेकंड बीत चुके हैं, पास किए गए घंटों की गणना करने के लिए इसे एक घंटे में 3600 सेकेंड तक विभाजित करें, और फिर "पूर्ण घंटे" स्ट्रिंग में अपना पूर्ण मान डालें।
वहाँ भी SEHumanizedTimeDiff है कि यदि आप के लिए एक मुद्दा है जो करता है/के बारे में एकाधिक भाषाओं का समर्थन करने के लिए है:
यह एक अच्छी छोटी पुस्तकालय है, और अकेले स्थानीयकरण को एक वोट वोट देना चाहिए; चूंकि कुछ अन्य प्रस्तावित समाधानों में से कोई भी नहीं करता है। –
@ करलोसपी के साथ सहमत हैं। पहले से ही बहुत सारे भाषाओं ने भी दिखने में योगदान दिया है। – djskinner
यहाँ (1 जनवरी एक बहुत अच्छा जवाब यह सेकंड में अवधि के बाद लगेगा, 1 9 70) और आपको '3 मिनट पहले' जैसी अच्छी प्रारूपित स्ट्रिंग वापस कर दें। सीधे शब्दों में तो जैसे अपनी तिथि वस्तु से कॉल करने की:
[timeAgoFromUnixTime:[myDateObject timeIntervalSince1970]];
+ (NSString *)timeAgoFromUnixTime:(double)seconds
{
double difference = [[NSDate date] timeIntervalSince1970] - seconds;
NSMutableArray *periods = [NSMutableArray arrayWithObjects:@"second", @"minute", @"hour", @"day", @"week", @"month", @"year", @"decade", nil];
NSArray *lengths = [NSArray arrayWithObjects:@60, @60, @24, @7, @4.35, @12, @10, nil];
int j = 0;
for(j=0; difference >= [[lengths objectAtIndex:j] doubleValue]; j++)
{
difference /= [[lengths objectAtIndex:j] doubleValue];
}
difference = roundl(difference);
if(difference != 1)
{
[periods insertObject:[[periods objectAtIndex:j] stringByAppendingString:@"s"] atIndex:j];
}
return [NSString stringWithFormat:@"%li %@%@", (long)difference, [periods objectAtIndex:j], @" ago"];
}
अगर यह आपको वोट देने में मदद करता है तो कृपया –
अच्छा, मेरे लिए काम किया। –
यह सही और छोटा और मीठा काम कर रहा है :) – iChirag
मैं फेसबुक की तरह एक दिनांक स्वरूप तो मैं इस NSDate श्रेणी ऊपर मार पड़ी है उनके मोबाइल एप्लिकेशन के लिए करता है चाहता था - आशा है कि यह (सामान इस तरह का होना चाहिए वास्तव में किसी के लिए उपयोगी है एक मानक पुस्तकालय में हो!) :)
मैं आपकी लाइब्रेरी से गुजर गया और यह बहुत उपयोगी था। लेकिन आपकी लाइब्रेरी में, "अभी अभी" जैसी चीज़ें, "6 मिनट पहले", "7 घंटे पहले" अच्छी तरह से काम करती है। लेकिन मुझे "3 दिन पहले", "4 सप्ताह पहले", "2 साल पहले" जैसी चीज़ें भी चाहिए। यह कैसे किया जाए? –
यह डेट शैली की फेसबुक शैली की नकल करने के लिए बनाया गया था। यह मानव पठनीय और आसानी से समझा जा सकता है (उन्होंने इस बात का बहुत अच्छा विचार किया है कि तिथि का सबसे अच्छा प्रतिनिधित्व कैसे किया जाए और मुझे लगता है कि जब आप इसका उपयोग कर रहे हैं तो यह बहुत स्पष्ट है कि यह एक अच्छा प्रारूप है। 4 सप्ताह पहले की तरह चीजें जब आप पिछली बार अंतराल को देख रहे हों तो आपको पर्याप्त विशिष्ट जानकारी नहीं दी जाएगी। यदि आप ऐसा कुछ प्राप्त करना चाहते हैं तो बस कथन द्वारा आउटपुट वाले स्ट्रिंग को संशोधित करें। –
लेकिन यह मेरी कंपनी की आवश्यकता थी और मैंने इसके बजाय भी सोचा "3 अक्टूबर को 12.42 बजे" प्रदर्शित करने के लिए, यदि मैं "1 डब्ल्यू" लिखता हूं (एक सप्ताह पहले) –
iOS के नवीनतम संस्करण में के बाद से यह सवाल पूछा गया था, NSDateFormatter
इस क्षमता जोड़ी पड़ा है। अब यह doesRelativeDateFormatting
संपत्ति का उपयोग कर कर सकता है।
इसे काम पर नहीं लाया जा सकता है। चेक किए गए दस्तावेज़ और सुनिश्चित नहीं हैं कि मैं क्या गलत कर रहा हूं। अगर मैं नियमित तारीख में प्रारूपित करता हूं तो मुझे एक स्ट्रिंग मिलती है। हालांकि अगर मैं सेट करता हूं तो रिलीजडेटेडडेटफॉर्मिंग मुझे कुछ भी वापस नहीं मिलता है। विचार? कोड उदाहरण? – lostintranslation
आप इसे Google का उपयोग करके कुछ ट्यूटोरियल में पा सकते हैं, लेकिन मुझे लगता है कि आपको अपना प्रश्न एक नए SO प्रश्न के रूप में पोस्ट करना चाहिए ताकि हम आपका कोड देख सकें! इसके बिना सलाह देना मुश्किल है। –
समाधान के लिए जोड़ा जा रहा है इस अधिक सरलीकृत विधि
NSDateComponents *today = [[NSCalendar currentCalendar] components:NSCalendarUnitDay|NSCalendarUnitHour|NSCalendarUnitMinute|NSCalendarUnitSecond fromDate:passed toDate:[NSDate date] options:0];
NSTimeInterval interval = [[NSDate date] timeIntervalSinceDate:date];
if (interval < 60) timestampString = [NSString stringWithFormat:@"%d seconds ago" ,today.second];
else if (interval < 60 * 60) timestampString = [NSString stringWithFormat:@"%d minutes ago" ,today.minute];
else if (interval < 60 * 60 * 24) timestampString = [NSString stringWithFormat:@"%d hours ago" ,today.hour];
else timestampString = [NSString stringWithFormat:@"%d days ago" ,today.day];
+(NSString*)HourCalculation:(NSString*)PostDate
{
NSLog(@"postdate=%@",PostDate);
// [email protected]"2014-04-02 01:31:04";
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
[dateFormat setTimeZone:gmt];
NSDate *ExpDate = [dateFormat dateFromString:PostDate];
NSLog(@"expdate=%@",ExpDate);
NSLog(@"expdate=%@",[NSDate date ]);
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:(NSDayCalendarUnit|NSWeekCalendarUnit|NSMonthCalendarUnit|NSYearCalendarUnit|NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate:ExpDate toDate:[NSDate date] options:0];
// NSLog(@"year=%d",components.year);
//
// NSLog(@"month=%d",components.month);
//
// NSLog(@"week=%d",components.week);
//
// NSLog(@"day=%d",components.day);
//
// NSLog(@"hour=%d",components.hour);
//
// NSLog(@"min=%d",components.minute);
//
// NSLog(@"sce=%d",components.second);
//
NSString *time;
if(components.year!=0)
{
if(components.year==1)
{
time=[NSString stringWithFormat:@"%ld year",(long)components.year];
}
else{
time=[NSString stringWithFormat:@"%ld years",(long)components.year];
}
}
else if(components.month!=0)
{
if(components.month==1)
{
time=[NSString stringWithFormat:@"%ld month",(long)components.month];
}
else{
time=[NSString stringWithFormat:@"%ld months",(long)components.month];
}
// NSLog(@"%@",time);
}
else if(components.week!=0)
{
if(components.week==1)
{
time=[NSString stringWithFormat:@"%ld week",(long)components.week];
}
else{
time=[NSString stringWithFormat:@"%ld weeks",(long)components.week];
}
// NSLog(@"%@",time);
}
else if(components.day!=0)
{
if(components.day==1)
{
time=[NSString stringWithFormat:@"%ld day",(long)components.day];
}
else{
time=[NSString stringWithFormat:@"%ld days",(long)components.day];
}
}
else if(components.hour!=0)
{
if(components.hour==1)
{
time=[NSString stringWithFormat:@"%ld hour",(long)components.hour];
}
else{
time=[NSString stringWithFormat:@"%ld hours",(long)components.hour];
}
}
else if(components.minute!=0)
{
if(components.minute==1)
{
time=[NSString stringWithFormat:@"%ld min",(long)components.minute];
}
else{
time=[NSString stringWithFormat:@"%ld mins",(long)components.minute];
}
// NSLog(@"time=%@",time);
}
else if(components.second>=0){
// NSLog(@"postdate=%@",PostDate);
// NSLog(@"expdate=%@",[NSDate date ]);
if(components.second==0)
{
time=[NSString stringWithFormat:@"1 sec"];
}
else{
time=[NSString stringWithFormat:@"%ld secs",(long)components.second];
}
}
return [NSString stringWithFormat:@"%@ ago",time];
}
इस कोड में आप समय दिखाएगा कोशिश ------------ की तरह 2 सेकंड पहले सेकंड - ----------- मिनट 2 मिनट पहले ------------ घंटे 2 घंटे पहले ------------ दिन 2 जैसे दिन पहले ------------ सप्ताह 2 सप्ताह पहले ------------ महीने 2 महीने पहले आखिरकार .... वर्ष 2 की तरह साल पहले :) इस
- 1. एनएसडीएटी
- 2. एनएसडीएटी कॉम्पोनेंट्स से एनएसडीएटी
- 3. एनएसडीएटी
- 4. एनएसडीएटी
- 5. एनएसडीएटी ऑब्जेक्ट
- 6. एनएसडीएटी की तुलना [एनएसडीएटी तिथि]
- 7. दोस्ताना यूआरएल
- 8. एनएसडीएटी मूल्य
- 9. एनएसडीएटी: समय
- 10. दो एनएसडीएटी
- 11. आईओएस: ऑडियो रिकॉर्डिंग फ़ाइल प्रारूप
- 12. एमडीएम: आईओएस एमडीएम कमांड प्रारूप
- 13. कोडइग्निटर: एसईओ दोस्ताना यूआरएल
- 14. जीडब्ल्यूटी एसई दोस्ताना आवेदन
- 15. php: एसईओ दोस्ताना यूआरएल
- 16. आईएसडी एसडीके एनएसएसटींग एनएसडीएटी
- 17. एनएसडीएटी एनएसएसटींग एन्कोडिंग
- 18. दो दिए गए एनएसडीएटी
- 19. अपने एनएसडीएटी गुणों
- 20. यदि एनएसडीएटी सोमवार
- 21. एनएसडीएटी कोई समय तत्व
- 22. आईओएस उपकरणों के लिए सही vCard प्रारूप?
- 23. कोको में एनएसडीएटी में एनएसटीइम इंटरवल जोड़ें
- 24. रेल में दोस्ताना बाइट स्वरूपण
- 25. एसईओ दोस्ताना यूआरएल Rewriter पैरामीटर
- 26. जावास्क्रिप्ट स्ट्रिंग एसक्यूएल दोस्ताना बनाना
- 27. सी ++ 11 दोस्ताना ग्राफिक्स लाइब्रेरी
- 28. दोस्ताना आईडी और आरक्षित शब्द
- 29. एनएसडीएटी से दिन का नाम?
- 30. एनएसडीएटी को मिलीसेकंड्स युग टाइम
[समयावधि स्मार्ट प्रारूपण] (http://stackoverflow.com/questions/5741952/smart-formatting-of-time-span) – dasblinkenlight
जांच [के संभावित डुप्लिकेट की कोशिश यह उत्तर] (http://stackoverflow.com/a/34359788/1106035) जिसमें नमूना लिंक है। –