SORU
16 EKİM 2012, Salı


Neden NSDateFormatter dönüş bu 4 saat dilimleri için tarih yok mu?

İOS6 (ön iOS6 test etmedim): bu çalıştırmayı deneyin

NSDateFormatter *julianDayDateFormatter = nil;
julianDayDateFormatter = [[NSDateFormatter alloc] init];
[julianDayDateFormatter setDateFormat:@"g"];

for (NSString *timeZone in [NSTimeZone knownTimeZoneNames]) {
    julianDayDateFormatter.timeZone = [NSTimeZone timeZoneWithName: timeZone];
    NSDate *date = [julianDayDateFormatter dateFromString:[NSString stringWithFormat:@"%d", 2475213]];
    if (date == nil)
        NSLog(@"timeZone = %@", timeZone);
}

ve şu çıktıyı alıyorum:

America/Bahia
America/Campo_Grande
America/Cuiaba
America/Sao_Paulo

Herkes bu dört zaman dilimi NSDateFormatter julian gün sayıları kümesi ile bu gibi davranmasına neden açıklayabilir mi? Diğer tüm saat dilimleri NSDateFormatter gerçek NSDates dönüş yapar.

CEVAP
16 EKİM 2012, Salı


Bir ben varşüphe. Sadece bir şüphe, ama oldukça güçlü biri.

Bu değer 19 Ekim 2064 temsil eder. Brezilya saat dilimi Yaz Saati gözlemlemekyerel gece yarısı başlıyor- bu saatleri ileri gitmek, gece yarısı var kendisi yok. 19 Ekim'de bu geçişler biridir.

İşte bazı örnek kod Noda Zaman, benim kullanma .Zaman API/NET tarih. Hakkında bildiği her saat diliminde gün başlangıcı aslında gece yarısı olup olmadığını kontrol eder:

using System;
using NodaTime;

class Test
{
    static void Main()
    {
        var localDate = new LocalDate(2064, 10, 19);
        var provider = DateTimeZoneProviders.Tzdb;
        foreach (var id in provider.Ids)
        {
            var zone = provider[id];
            var startOfDay = zone.AtStartOfDay(localDate).LocalDateTime.TimeOfDay;
            if (startOfDay != LocalTime.Midnight)
            {
                Console.WriteLine(id);
            }
        }
    }
}

Çok benzer bir liste oluşturur:

America/Bahia
America/Campo_Grande
America/Cuiaba
America/Sao_Paulo
Brazil/East

Brezilya/Doğu Amerika için bir takma ad olabilir şüpheli listesinde yok ediliyor/Sao_Paolo,.

Neyse, yerel gece yarısı olan Julian gün senin sorunu biçimlendirici her zaman NSDate * iade etmek istiyor sanıyorum geri almak için. O değilvarEkim ayında o zaman 19 2064 bölgeleri... dolayısıyla sıfır döndürür. Şahsen 1 değeri yerine, ama hey dönmelidir öneririm...

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Alan Fullmer

    Alan Fullmer

    3 EYLÜL 2010
  • Jonathan Leack

    Jonathan Lea

    26 ŞUBAT 2007
  • The Bad Tutorials

    The Bad Tuto

    6 EKİM 2009