Soru Ekstra 75 saniye nereden geliyor?


Bir Julian Day hesap makinesinde bazı birim testleri yazarken, 2 Aralık 1847'den önceki tarihlerin NSDate tarafından hatalı bir şekilde başlatıldığını gördüm. 75 saniyede eklenmiş görünüyorlar. Bu tarihe işaret eden bir şey bulamadım (ki bu da Gregoryen takvim kesintisinden sonra iyi durumda). Bu bir hata mıdır yoksa rastlamadığım tarihi bir takvim ayarı var mı?

int main(int argc, const char * argv[])
{
    @autoreleasepool {

        NSCalendar *cal = [NSCalendar currentCalendar];
        NSDateComponents *dateComps = [NSDateComponents new];
        dateComps.year = 1847;
        dateComps.month = 12;
        dateComps.day    = 1;
        NSDate *d1 = [cal dateFromComponents:dateComps];
        NSLog(@"d1 = %@", d1);

        dateComps = [NSDateComponents new];
        dateComps.year = 1847;
        dateComps.month = 12;
        dateComps.day    = 2;
        NSDate *d2 = [cal dateFromComponents:dateComps];
        NSLog(@"d2 = %@", d2);
    }
    return 0;
}

Çıktı:

d1 = 1847-12-01 00:01:15 +0000

d2 = 1847-12-02 00:00:00 +0000


44
2018-02-20 23:00


Menşei


Herhangi bir değişiklik yapmadan kodunuzu kopyaladım ve bu benim çıktı: `d1 = 1847-12-01 00:00:00 -064116 || d2 = 1847-12-02 00:00:00 -064116` - Merlevede


Cevaplar:


Göre http://www.timeanddate.com/worldclock/clockchange.html?n=136&year=1847 o zamanlar 75 saniyenin ilerisinde bir zaman vardı.

Londra'da, yerel saat 1 Aralık 1847'de Çarşamba 12: 00'a ulaştığında, saatler 1 Aralık 1847'de 12:01:15 AM'ye ilerletildi.


92
2018-02-20 23:10



Aha! Ve nerede olduğumu tahmin et ... Teşekkürler. - Vince O'Sullivan
Kendini hazırla. Alınan oylar geliyor .. - Soner Gönül


Cevap olarak Richard Krajunus tarafından yapılan yazı, işte bazı ek bilgiler zoneinfo veritabanı Bu tür değişiklikleri izlemek için çoğu bilgisayar tarafından kullanılır:

# From Paul Eggert (1993-11-18):
#
# Howse writes that Britain was the first country to use standard time.
# The railways cared most about the inconsistencies of local mean time,
# and it was they who forced a uniform time on the country.
# The original idea was credited to Dr. William Hyde Wollaston (1766-1828)
# and was popularized by Abraham Follett Osler (1808-1903).
# The first railway to adopt London time was the Great Western Railway
# in November 1840; other railways followed suit, and by 1847 most
# (though not all) railways used London time.  On 1847-09-22 the
# Railway Clearing House, an industry standards body, recommended that GMT be
# adopted at all stations as soon as the General Post Office permitted it.
# The transition occurred on 12-01 for the L&NW, the Caledonian,
# and presumably other railways; the January 1848 Bradshaw's lists many
# railways as using GMT.  By 1855 the vast majority of public
# clocks in Britain were set to GMT (though some, like the great clock
# on Tom Tower at Christ Church, Oxford, were fitted with two minute hands,
# one for local time and one for GMT).  The last major holdout was the legal
# system, which stubbornly stuck to local time for many years, leading
# to oddities like polls opening at 08:13 and closing at 16:13.
# The legal system finally switched to GMT when the Statutes (Definition
# of Time) Act took effect; it received the Royal Assent on 1880-08-02.
#
# In the tables below, we condense this complicated story into a single
# transition date for London, namely 1847-12-01.  We don't know as much
# about Dublin, so we use 1880-08-02, the legal transition time.

Maalesef bu konuyla ilgili bir yorum kullanarak yanıt veremedim; StackOverflow beni henüz buna layık görmüyor.


22
2018-04-18 18:53



Bu yine de bir cevap olmalı, bu yüzden sistem sizi doğru şeyi yapmaya zorladı. Başarı! - Jeff Atwood


Herhangi bir Tarih / Zaman manipülasyonu yapıyorsanız, Takvim SSS. Bunun gibi tüm sorulara cevap veriyor.


3
2018-04-18 18:41





Bu bir hata mıdır yoksa rastlamadığım tarihi bir takvim ayarı var mı?

Takvim birkaç kez olmuştur ... sabit geçmişte.

Wikipedia makalelerinin "benimseme" bölümlerini kontrol edin. Julian ve Gregoryen takvimler.

NSDate örneği, her zaman başlatıldığı zaman dilimi için her zaman doğru tarihi göstermelidir.


1
2018-02-20 23:07





NSDateComponents yerel saat diliminizi kullanıyor. TimeZone'u UTC'ye ayarlamayı deneyin.

NSCalendar *cal = [NSCalendar currentCalendar];
NSDateComponents *dateComps = [NSDateComponents new];
dateComps.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"UTC"];
dateComps.year = 1847;
dateComps.month = 12;
dateComps.day    = 1;
NSDate *d1 = [cal dateFromComponents:dateComps];
NSLog(@"d1 = %@", d1);

dateComps = [NSDateComponents new];
dateComps.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"UTC"];
dateComps.year = 1847;
dateComps.month = 12;
dateComps.day    = 2;
NSDate *d2 = [cal dateFromComponents:dateComps];
NSLog(@"d2 = %@", d2);

[19875:60b] d1 = 1847-12-01 00:00:00 +0000
[19875:60b] d2 = 1847-12-02 00:00:00 +0000

0
2018-02-20 23:06



Teşekkürler Eugene, kodunuzu 'UTC' ve 'GMT' (Zaman dilimi Turgis Green, İngiltere) saat dilimiyle çalıştırdım ve her ikisi de 75 saniye ofset olmadan çıktı. Diğer zaman dilimleri de ilginç sonuçlar verir. EST 5 saat değil 4h56m02s ile ofset görünüyor. 7h52m58s tarafından PST. Tüm çok meraklı ve tüm, umarım, garip hatalardan ziyade tarihi ayarlamalar nedeniyle. - Vince O'Sullivan
Gizli bir saat dilimini açıkça belirlemek için görünüyor. Merakla, eğer saat diliminde 'GMT' ayarlıyorum, yukarıdaki kod 'UTC' başına çıktılar ama eğer @ Z 'ye ayarlanmış bir tarih formatı kullanırsam 75 sanırım hala görebiliyorum. - Vince O'Sullivan