Keputusan untuk menggunakan 1 Januari 1753 (1753-01-01
) sebagai nilai tanggal minimum untuk suatu datetime di SQL Server kembali ke asal Sybase-nya.
Pentingnya tanggal itu sendiri dapat dikaitkan dengan pria ini.
Philip Stanhope, Earl ke-4 Chesterfield. Siapa yang mengarahkan Undang-Undang Kalender (Gaya Baru) 1750 melalui Parlemen Inggris. Ini disahkan untuk adopsi kalender Gregorian untuk Inggris dan kemudian koloni.
Ada beberapa hari yang hilang (link arsip internet) dalam kalender Inggris pada tahun 1752 ketika penyesuaian akhirnya dibuat dari kalender Julian. 3 September 1752 hingga 13 September 1752 hilang.
Kalen Delaney menjelaskan pilihannya seperti ini
Jadi, dengan 12 hari yang hilang, bagaimana Anda bisa menghitung tanggal? Misalnya, bagaimana cara menghitung jumlah hari antara 12 Oktober 1492 dan 4 Juli 1776? Apakah Anda termasuk yang hilang 12 hari? Untuk menghindari pemecahan masalah ini, pengembang Sybase SQL Server asli memutuskan untuk tidak mengizinkan tanggal sebelum 1753. Anda dapat menyimpan tanggal lebih awal dengan menggunakan bidang karakter, tetapi Anda tidak dapat menggunakan fungsi tanggal dan waktu dengan tanggal sebelumnya yang Anda simpan di bidang karakter.
Pilihan tahun 1753 memang tampak agak anglosentris namun karena banyak negara Katolik di Eropa telah menggunakan kalender selama 170 tahun sebelum penerapan Inggris (awalnya tertunda karena ditentang oleh gereja). Sebaliknya banyak negara tidak mereformasi kalender mereka sampai jauh kemudian, 1918 di Rusia. Memang Revolusi Oktober 1917 dimulai pada 7 November di bawah kalender Gregorian.
Keduanya datetime
dan datetime2
yang baru tipe data yang disebutkan dalam jawaban Joe jangan mencoba menjelaskan perbedaan lokal ini dan cukup gunakan Kalender Gregorian.
Jadi dengan rentang datetime2
yang lebih besar
SELECT CONVERT(VARCHAR, DATEADD(DAY,-5,CAST('1752-09-13' AS DATETIME2)),100)
Kembali
Sep 8 1752 12:00AM
Satu poin terakhir dengan datetime2
tipe data adalah bahwa ia menggunakan kalender Gregorian proleptik yang diproyeksikan ke belakang jauh sebelum benar-benar ditemukan sehingga penggunaan terbatas dalam menangani tanggal-tanggal bersejarah.
Ini kontras dengan implementasi Perangkat Lunak lain seperti kelas Kalender Gregorian Java yang secara default mengikuti Kalender Julian untuk tanggal hingga 4 Oktober 1582 kemudian melompat ke 15 Oktober 1582 di kalender Gregorian yang baru. Ini menangani model Julian tahun kabisat dengan benar sebelum tanggal itu dan model Gregorian setelah tanggal itu. Tanggal cutover dapat diubah oleh penelepon dengan memanggil setGregorianChange()
.
Sebuah artikel yang cukup menghibur membahas beberapa keanehan dengan adopsi kalender dapat ditemukan di sini.