2013-03-25 8 views
6

Ich habe gerade festgestellt, dass NSDate *nowDate = [NSDate date]; gibt mir GMT + 0 Zeit und nicht die Ortszeit. Also auf meinem iPad ist es 13:00 und die Ausgabe dieses Codes ist 12:00.Wie bekomme ich lokale Zeit auf iOS

Wie bekomme ich die Ortszeit richtig?

+0

diesen Link Versuchen Sie ermöglicht es Ihnen, lokale Zeitzone zu erhalten. http://buildingmyworld.wordpress.com/2011/04/13/get-local-time-from-iphone-local-nsdate/ –

+0

Wie erhalten Sie die "Ausgabe dieses Codes"? Verwenden Sie einen NSDateFormatter, um eine Zeichenfolge abzurufen, oder verwenden Sie nur das NSDate-Objekt NSLog? – colincameron

Antwort

28

Probieren Sie es aus!

NSDate* sourceDate = [NSDate date]; 

NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"]; 
NSTimeZone* destinationTimeZone = [NSTimeZone systemTimeZone];//use `[NSTimeZone localTimeZone]` if your users will be changing time-zones. 

NSInteger sourceGMTOffset = [sourceTimeZone secondsFromGMTForDate:sourceDate]; 
NSInteger destinationGMTOffset = [destinationTimeZone secondsFromGMTForDate:sourceDate]; 
NSTimeInterval interval = destinationGMTOffset - sourceGMTOffset; 

NSDate* destinationDate = [[[NSDate alloc] initWithTimeInterval:interval sinceDate:sourceDate] autorelease]; 

Es gibt Ihnen die Zeit entsprechend der aktuellen Systemzeitzone.

+11

Warum ist es so verdammt kompliziert. -1 für iOS! –

+4

ist nicht kompliziert. Zeit ist Zeit ist Zeit. Das Format der Zeit ist schwer, weil Menschen Zeitzonen geschaffen haben. Also um 18:00 Uhr um die Welt wäre Abend. – John

+0

Dies gibt Ihnen einen Zeitpunkt "x Stunden" vor oder in der Zukunft, nicht die aktuelle Zeit. – colincameron

4
// get current date/time 
NSDate *today = [NSDate date]; 
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
// display in 12HR/24HR (i.e. 11:25PM or 23:25) format according to User Settings 
[dateFormatter setTimeStyle:NSDateFormatterShortStyle]; 
NSString *currentTime = [dateFormatter stringFromDate:today]; 
[dateFormatter release]; 
NSLog(@"%@",currentTime); 
3
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; 
[calendar setTimeZone:[NSTimeZone localTimeZone]]; 
NSDateComponents *dateComponents = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:[NSDate date]]; 
NSDate *d = [calendar dateFromComponents:dateComponents]; 
6

NSDate kümmert sich nicht um Zeitzonen. Es zeichnet einfach einen Zeitpunkt auf.

Sie sollten die lokale Zeitzone festgelegt, wenn die NSDateFormatter mit einem String-Darstellung des Datums zu erhalten:

NSDate *date = [NSDate date]; 
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setTimeStyle:NSDateFormatterMediumStyle]; 
[dateFormatter setDateStyle:NSDateFormatterMediumStyle]; // Set date and time styles 
[dateFormatter setTimeZone:[NSTimeZone localTimeZone]]; 
NSString *dateString = [dateFormatter stringFromDate:date]; 
+0

und was dann? Soll ich NSSTring erneut in NSDate konvertieren? Sieht nicht sehr effizient aus –

+0

Wenn Sie ein NSDate brauchen, dann verwenden Sie einfach "[NSDate date]" - es kümmert sich nicht um Zeitzonen. Ich schlage vor, Sie lesen das Programm zur Programmierung von Datum und Uhrzeit - https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/DatesAndTimes/DatesAndTimes.html#//apple_ref/doc/uid/10000039i – colincameron

+0

Das ist die Problem Ich brauche ein NSDate-Objekt, das sich interessiert;) –

Verwandte Themen