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

  • How to Cook ?

    How to Cook

    31 Ocak 2007
  • Muse

    Muse

    28 EYLÜL 2006
  • paulandstorm

    paulandstorm

    4 EYLÜL 2006