Excel hafta içi 1900 için neden yanlış?


27

Bu soru gözlemlerine dayanmaktadır AdamV içinde onun cevabını üzerinde Excel'de bir hücreye gün adını nasıl alabilirim?

A1, 2009-08-01 değerine sahipse:

  • =WEEKDAY(A1) alacak 7
  • =TEXT(7, "dddd") alacak Saturday
  • =TEXT(7,"dddd, yyyy-mm-dd") alacak Saturday, 1900-01-07
  • =TEXT(1,"dddd, yyyy-mm-dd") alacak Sunday, 1900-01-01
  • =TEXT("1900-01-01","dddd, yyyy-mm-dd") ayrıca alacak Sunday, 1900-01-01

Son ikisi yanlış: 1 Ocak 1900, aslında bir Pazartesi.
Çeşitli kaynaklar bunu doğrulamaktadır:

Neyi kaçırıyorum? Excel bunu neden yanlış yapıyor?


1
Bu soru sayesinde 1/1 / 1900’ün bir Pazar olmadığını açıkça belirtmek için önceki cevabımı biraz yeniden değerlendirdim ama Excel öyle olduğunu düşünüyor. Yanlışlık, önceki cevabın içeriğini değiştirmez, ki bir tarih gibi görünmek üzere biçimlendirilmiş metin üretmek için temel olarak bir hafta içi sayı kullanmak, hatalı ve gereksizdir.
AdamV

Yanıtlar:


40

Microsoft KB 214058'de açıklandığı gibi :

1 Mart 1900'den önceki haftanın günleri Excel'de yanlış

DAHA FAZLA BİLGİ

Microsoft Excel'deki tarih sistemi ilk olarak oluşturulduğunda, diğer elektronik tablo programları tarafından kullanılan tarih sistemleri ile tam uyumlu olacak şekilde tasarlanmıştır.

Ancak, bu tarih sisteminde, 1900 yılı hatalı bir artık yıl olarak yorumlanmaktadır. 1900 yılında 29 Şubat ("artık gün") olmadığından, 1 Mart 1900'den önceki herhangi bir tarih için ("artık gün" den sonraki gün) haftanın günü doğru hesaplanmamıştır.

"Diğer elektronik çizelge programları" , o zamanlar oldukça popüler olan Lotus 1-2-3'e atıfta bulundu ve yanlış bir şekilde 1900 yılının artık bir yıl olduğu varsayılıyordu. Bu, KB 214326'da daha ayrıntılı olarak açıklanmaktadır :

Excel 2000 hatalı bir şekilde 1900 yılının artık bir yıl olduğunu varsayıyor

DAHA FAZLA BİLGİ

Lotus 1-2-3 ilk piyasaya sürüldüğünde, program 1900 yılının bir artık yıl olduğunu, aslında bir artık yıl olmamasına rağmen kabul etti. Bu, programın artık yılların üstesinden gelmesini kolaylaştırdı ve Lotus 1-2-3'teki neredeyse tüm tarih hesaplamalarına zarar vermedi.

Microsoft Multiplan ve Microsoft Excel piyasaya sürüldüğünde, 1900'ün artık bir yıl olduğunu varsaydılar. Bu varsayım, Microsoft Multiplan ve Microsoft Excel'in Lotus 1-2-3 tarafından kullanılan seri tarih sistemini kullanmasına ve Lotus 1-2-3 ile daha fazla uyumluluk sağlamasına izin verdi. 1900'leri artık yıl olarak kabul etmek, kullanıcıların çalışma sayfalarını bir programdan diğerine taşımasını da kolaylaştırdı.

Bu davranışı düzeltmek için teknik olarak mümkün olsa da, Microsoft Excel'in mevcut sürümleri 1900'ün artık bir yıl olduğunu varsaymasın, bunu yapmanın dezavantajları avantajlardan ağır basıyor.

Bu davranış düzeltildiyse, aşağıdakiler de dahil olmak üzere birçok sorun ortaya çıkar:

  • Geçerli Microsoft Excel çalışma sayfalarındaki ve diğer belgelerdeki neredeyse tüm tarihler bir gün azalacaktı. Bu değişimin düzeltilmesi, özellikle tarihleri ​​kullanan formüllerde, zaman ve emek harcayacaktır.
  • WEEKDAY işlevi gibi bazı işlevler farklı değerler döndürür; bu, çalışma sayfalarındaki formüllerin yanlış çalışmasına neden olabilir.
  • Bu davranışın düzeltilmesi, Microsoft Excel ile tarih kullanan diğer programlar arasındaki seri tarih uyumluluğunu ortadan kaldıracaktır.

Davranış düzeltilmemiş kalırsa, yalnızca bir sorun oluşur:

  • WEEKDAY işlevi, 1 Mart 1900'den önceki tarihler için hatalı değerler döndürür. Çoğu kullanıcı 1 Mart 1900'den önceki tarihleri ​​kullanmadığından, bu sorun nadirdir.

10
İşte Stack Exchange'in kendi Joel Spolsky'sinden
matt

5
Ayrıca bakınız . Birçok programcı yanlış tarih / saat çalışmanın kolay olduğunu varsayıyor :)
BlueRaja - Danny Pflughoeft

3
Tarihsel nitpicK: 1-2-3 derken "oldukça popüler" dedin, bir zamanlar baskın bir elektronik tablo olduğu anlamına geliyordu.
Isaac Rabinovitch

12

Joel'in kendisinin açıkladığı sebep: İlk BillG İncelemem

Temel, 1 Ocak 1900 yerine 31 Aralık 1899'u kullanır; ancak bazı nedenlerden dolayı, bugünün tarihi, Excel'deki Temel ile aynıydı.

Ha?

Nedenini hatırlayabilecek yaşta bir Excel geliştirici bulmaya gittim. Ed Fries cevabı biliyor gibiydi.

“Ah,” dedi bana. "28 Şubat 1900’e bakın."

"59," dedim.

"Şimdi 1 Mart'ı deneyin."

"61 yaşında!"

"60'a ne oldu?" Diye sordu Ed.

"29 Şubat 1900, artık bir yıl oldu! 4 ile bölünebilir!"

“İyi tahmin, ama puro yok,” dedi Ed ve bir süre merak etmemi sağladı.

Hata. Biraz araştırma yaptım. 100 ile bölünebilen yıllar, 400 ile bölünmediği sürece artık yıl değildir.

1900 artık bir yıl değildi.

"Excel'de bir hata var!" Ben bağırdım.

“Eh, pek değil,” dedi Ed. “Bu şekilde yapmak zorundaydık çünkü Lotus 123 çalışma sayfalarını içe aktarabilmemiz gerekiyor.”

“Öyleyse, Lotus 123’te bir böcek mi var?”

“Evet, ama muhtemelen bir kasıtlı olan. Lotus 640K'ya sığmak zorunda kaldı. Bu çok fazla hafıza değil. Sıfır, çok hızlı ve kolay… Lotus adamları muhtemelen geçmişte iki ay boyunca yanlış olmasının önemli olmadığını düşündüler.


1
@JeroenWiertPluimers: Aslında bu bağlantıdaki cevabım moderatör tarafından silindi ve cevabımı genişletmeye karar verdim.
Giorgi

2

Buna bir çözüm, yıla 400 yıl eklemek, aşağıdaki günü olduğu gibi haftanın gününü hesaplamak = HAFTA GÜNÜ (TARİH (A4 + 400, B4, C4), 1) yani A4 = 1834 B4 = 12 C4 = 14 ise bu, 14 Aralık 2234 ile aynı olan 1'i (Pazar) döndürür. Bu, Gregoryen takvimindeki değişiklikten sonraki yıl 1753'ten önceki tarihler için çalışmayı durdurur

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.