2013-03-25 31 views
6

Sadece NSDate *nowDate = [NSDate date];'un bana GMT + 0 zamanı verdiğini ve yerel saatin olmadığını fark ettim. Yani temelde iPad'im 13:00 ve bu kodun çıkışı 12:00.iOS'ta yerel saat nasıl edinilir

Yerel saati nasıl doğru şekilde alabilirim?

+0

bu bağlantıyı deneyin, yerel saat dilimini almak için izin verir. http://buildingmyworld.wordpress.com/2011/04/13/get-local-time-from-iphone-local-nsdate/ –

+0

"Bu kodun çıktısını" nasıl alıyorsunuz? Bir dize almak için NSDateFormatter kullanıyor musunuz yoksa sadece NSDate nesnesini NSLog kullanıyor musunuz? – colincameron

cevap

28

Atış!

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]; 

Geçerli sistem saat dilimine göre saati size verecektir.

+11

neden bu kadar kanlı bir komplike. IOS için -1! –

+4

onun karmaşık değil. Zaman, Zaman Zamanı. Zamanın biçimi zordur çünkü insanlar saat dilimlerini yaratmışlardır. Öyleyse, dünyanın her tarafında saat 18:00 olacaktı. – John

+0

Bu size x saat önce veya gelecekte bir zaman kazandıracak, şimdiki zaman değil. – 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 saat dilimleri umursamıyor. Sadece zamandaki bir anı kaydeder. tarihin dize temsilini almak için NSDateFormatter kullanırken

yerel saat dilimi ayarlayın olmalıdır:

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

kullanın ve sonra ne? NSSTring'i tekrar NSDate'e dönüştürmeli miyim? Çok verimli görünmüyor –

+0

Eğer bir NSDate'e ihtiyacınız varsa, sadece [NSDate date] 'yi kullanın - zaman dilimleri ile ilgilenmez. Tarih ve Saat Programlama Kılavuzu'nu okumanızı öneririm - https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/DatesAndTimes/DatesAndTimes.html#//apple_ref/doc/uid/10000039i – colincameron

+0

Sorun Ben bir NSDate nesnesi gerekir;) –

İlgili konular