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?
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?
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.
neden bu kadar kanlı bir komplike. IOS için -1! –
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
Bu size x saat önce veya gelecekte bir zaman kazandıracak, şimdiki zaman değil. – colincameron
// 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);
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];
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];
kullanın ve sonra ne? NSSTring'i tekrar NSDate'e dönüştürmeli miyim? Çok verimli görünmüyor –
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
Sorun Ben bir NSDate nesnesi gerekir;) –
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/ –
"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