Programlamada, varsayılan tarih biçiminin YYYYMMDD olması ve başka bir şey olmaması için herhangi bir teknik sebep var mı?


118

Bunun böyle olmasının herhangi bir mühendislik sebebi var mı? Bir "YIL" bir "AY" dan daha spesifik olduğu için bir RDBMS durumunda performans ile ilgisi olduğunu merak ediyordum, örneğin: sadece bir yıl 2000 var, ancak her yıl "Ocak", bu, ilk önce bir şeyi filtrelemek / sıralamak için daha kolay / daha hızlı olur ve bu nedenle yılın ilk gelmesi.

Ama bunun gerçekten mantıklı olup olmadığını bilmiyorum ... Herhangi bir sebep var mı?


14
@IMil Bundan hoşlanmayabiliriz, ancak sıklıkla dizeleri olarak depolanırlar.
Honza Brabec

14
@candied_orange Özellikle tarihlerde bu garip olurdu.
glglgl


19
Not olarak, bu format o kadar da yabancı değil . Örneğin, Macarca dilinde (ve muhtemelen bazı diğerleri de) YYYY. MM. GG. varsayılan yazılı tarih biçimidir ve bilgisayarlardan çok önce çok zaman geçti.
Neinstein

31
Programlamada, varsayılan tarih formatı "YYYYMMDD" şeklindedir? Doğru olsaydı iyi olurdu, ama kesinlikle her yerde böyle değil. RFC 822 ve RFC 850 ve ANSI C'ler asctimehala birçok yerde yaygın olarak kullanılmaktadır. RFC 3339 ve ISO 8601'in eski formatları aşamalı olarak değiştirmesi güzel ve kesinlikle ileriye dönük kullanılması gerekenler. Daha genel olarak, ISO 8601 temel formunun (ayırıcı karakter içermeyen düz YYYYMMDD) aslında YYYY-AA-GG gibi diğer bazı formlardan daha az yaygın olduğunu söyleyebilirim .
Daniel Pryden

Yanıtlar:


386

Bu şekilde, tarihler varsayılan sıralama kurallarını (örneğin, sözlük sıralama ) kullanarak kolayca dizeler olarak sıralanabilir .

Bu nedenle hem ay hem de gün iki basamak kullanılarak belirtilir (gerekirse bir sıfır eklenir).

Aslında ISO 8601 tarafından tanımlanan tarih biçimlerinden biridir . Bu standart ayrıca, 2015-03-27T15:26:40Zdizeler olarak da sıralanabilen tarih ve saat biçimini tanımlar .

Bununla birlikte, YYYYMMDD'nin, dizeyi bir tam sayı olarak ayrıştırmasını ve yine de tamsayılarda varsayılan sıralamayı kullanmasını kolaylaştırarak (alt dizeler veya karakter değiştirmeleri olmadan) kolayca mümkün kılmanın ek bir yararı vardır .


90
@lucaswxp: Belirli bir şemadan sonra dizgiler için özel bir durum karşılaştırması yazarsanız, elbette istediğiniz kadar barok yapabilirsiniz. Burada şema şudur ki, sözlü düzen (ayrıca sözlü sayıya duyarlı düzen de) aynı zamanda mantıksal bir düzendir, bu nedenle özelleştirmeye gerek yoktur.
Deduplicator

19
@lucaswxp Tarih dizeniz hafızada olmayabilir. Pratik örnek: Zaten ISO tarihine ve yılda milyonlarca + sıraya göre sıralanmış bir csv dosyanız var. Ve sadece belirli tarihler arasındaki satırları döndürmek istiyorsun. İlk tarihinize ulaşıncaya kadar dosya satırını satır satır (satır satır) okuyabilir, ardından son tarihinize ulaşana kadar satırları belleğe yükleyebilirsiniz. Dosyanın geri kalanını atlayabilirsiniz. Ancak tarihi başka bir biçim olarak kaydederseniz veya yalnızca yıla göre sıralarsanız, dosyayı kapatmadan önce tüm yıldaki kayıt değerlerini okumak zorunda kalırsınız.
Tom A. Vibeto

48
YYYYAAGG böylece tire, ISO 8601 isteğe bağlı olmalarına dikkat edin olduğunu ISO 8601.
Martin Ba

32
@Benoit Y10K problemini çözmek için zaten bir öneride bulunuldu. Eğer hala aynı dönemi kullanıyorsak, o zaman AYYYYYMMDD’ye gideceğiz, Y100K’ye, ki bu da BYYYYYYYYYMMDD Bu önde gelen alfa öneki, doğru sıralama düzenini garanti eder ("A0YYYY ..." vb., YYYY ... tarihleri ​​hala kullanılıyorsa geçersiz temsiller olması koşuluyla). Yıl hanelerinin sayısının üçe bölündüğü bir noktada, evrenin sıcak ölümünden önce harflerin tükenmemesini sağlamak için alfa önekini her değiştirdiğimizde üç basamak eklemeye başlayacağız.
Monty Harder

35
Bu formatla sıralamanın sadece "daha kolay" olmadığını not etmek önemlidir. Sözcüksel (karakter tabanlı) sıralama, geçici sıralamaya eşdeğer olur; bu, ayrıştırma olmadan geçici olarak sıralayabileceğiniz anlamına gelir .
jpmc26

135

Henüz bahsedilmedi, ancak YYYY içindeki siparişleri hızlı bir şekilde parlatıyorsunuz. Bu zaten bin yıl, yüzyıl, yıl, yıl. Başka bir deyişle, YYYY zaten en uzun dönemden en kısa süreye sipariş edilir. Aynı şey MM ve DD için de geçerli, sayı sistemi böyle çalışıyor.

Dolayısıyla, alanlar arasındaki sırayı alanların içindeki sırayla tutarlı tutmak için tek seçenek YYYYMMDD'dir.

Zahbaz ve Arseni Mourzenko'nun belirttiği gibi, YYYYMMDD formatları kolayca sıralanır. Bu şanslı bir tesadüf değil, ilk önce tarlaları en uzun süre koymak (ve uzunluğu sabit tutmak; burada bir Y10K problemi ortaya koyuyoruz) doğrudan bir sonucudur.)


34
Şaka yapıyor olsanız da, bu kod 8000 yıl içinde ciddi bir şekilde bizi rahatsız ediyor olabilir. Herkes beklemektedir daha Kod 😓 ... uzun yaşar
deceze

15
@deceze ISO8601 zaten 5 basamaklı bir yıl için hükümler içeriyor, ancak şu anda hangi DateTime uygulamalarının buna izin verdiğini görmek ilginç olurdu.
Zac Faragher

4
@ZFargher, daha sonra uygulamak için bolca vaktimiz olduğuna eminim, acele etmeye gerek yok, değil mi?
ilkkachu

51
@deceze Neden beni çözdün - kanseri nasıl tedavi edeceğini öğrendin mi? Hayır, 9999 yılı ve COBOL'u biliyorsunuz.
user3067860 28:18

6
Yazımınızı düzeltmek isteyebilirsiniz. Kelime bin , çoğul milenyumda , zorunlu çift N eşleştirmek için bir çift-N ile yazıldığından yıllık Latince gelen Annus yıl için. Eğer sadece bir tek N ile yanlış yazarlar, bu artık mutsuz tek N maçları anal Latince den anüs İngiliz spor içine loanword aynı anlam. Kısacası, her zaman binlerce popo deliğinden değil, binlerce yıldan söz edeceğiniz şekilde hecelemeniz gerekir. :)
tchrist

57

Herhangi bir sebep var mı?

Evet. Bu yazılım parçaları ISO 8601'i kullanacak .

ISO 8601'in diğer tarih biçimlerine göre birçok avantajı vardır:

  • Belirli bir belgeye sahip bir standart :)
  • Belirgin değil. GG / aa / yyyy ve gg / aa / yyyy 13. günü geçmedikçe kafa karıştırıcı olabilir.
  • Sözcükbilimsel olarak artan zaman sırasına göre sıralanır, bu nedenle özel bir tarih sıralama mantığı gerekmez. Bu, özellikle sözlükbilimsel sayı sıralamasının kafa karıştırıcı olduğu (örneğin 1_file, 10_file, 2_file) dosya isimlerinde kullanışlıdır .
  • 4 basamaklı yıl ve sıfır yastıklı ay ve yıl zorunludur. Bu, 2000 yılı sorununu ve diğer belirsizliklerden kaçınır.

Neden ISO 8601'in ilk sırada yer aldığına gelince , insanlar tarih / formatları ülkeler / sistemler arasında veri takas ederken belirsiz ve kafa karıştırıcı buluyorlardı ve belirsiz bir şeye ihtiyaçları vardı.

Gerekçe için şartnamenin giriş bölümüne bakınız .

Bu alandaki ISO Tavsiyeleri ve Standartları 1971'den beri mevcut olmasına rağmen, farklı ülkelerde tarihlerin ve saatlerin farklı sayısal temsil biçimleri ortak kullanımdadır. Bu temsillerin ulusal sınırlar arasında değiştirildiği yerlerde, sayıların öneminin yanlış yorumlanması meydana gelebilir, bu da karışıklığa ve diğer sonuçta ortaya çıkan hata veya kayıplara neden olabilir. Bu Uluslararası Standardın amacı, yanlış yorumlanma riskini ortadan kaldırmak ve karışıklık ve sonuçlarından kaçınmaktır.

...

Bu Uluslararası Standart, günün tarihi ve saati için en sık kullanılan ifadeleri ve önceki Uluslararası Standartlardan gelen temsillerini korur ve uygulamada kullanılan bazı yeni ifadeler için benzersiz temsiller sağlar. Bilgi alışverişinde, özellikle veri işleme sistemleri ve ilgili ekipman arasında uygulanması, yanlış yorumlamadan kaynaklanan hataları ve bunların ürettiği maliyetleri ortadan kaldıracaktır. Bu Uluslararası Standardın tanıtımı sadece uluslararası sınırlar arasında değişimi kolaylaştırmakla kalmayacak, aynı zamanda yazılımın taşınabilirliğini de artıracak ve bir organizasyon içinde olduğu kadar kurumlar arasındaki iletişim sorunlarını da kolaylaştıracaktır.

Standart, sınırlayıcı kullanımını en aza indirerek “temel” varyasyonları tanımlar. Yani, YYYYMMDDbir temel genişletilmiş biçimine alternatif YYYY-MM-DD.


4
ISO 8601’in YYYYMMDD’nin yanı sıra YYYYMMDD’ye de izin verdiğini bilmiyordum.
keuleJ

iso.org/iso-8601-date-and-time-format.html YYYY-AA- GG'nin "Genişletilmiş formatı" nın 8601 için tek format olduğunu gösteriyor gibi görünüyor.
Oskar Austegard

3
@keuleJ YYYY-AA-GG yerine YYYYMMDD gibi sınırlayıcıların kullanımının en aza indirilmesi, ISO 8601 standardında “temel” format değişimi olarak adlandırılır.
Basil Bourque

ISO 8601'in iki avantajı: (a) SPACE karakterli ve yerelleştirilmiş metin içermeyen makine ile ayrıştırılması kolay, ve (b) Yıl boyunca ilk önce tanınması kolay olan (günümüzde ise) insanların kültürler arasında sezgiselleşmesi kolay, ve İngilizce dilini varsaymadan.
Basil Bourque

55

Çünkü bunu yapmanın diğer tüm yolları belirsizdir.

01.02.2003 Bu ne anlama geliyor? İkinci Ocak 2003? Veya Avrupa'da: 1 Şubat 2003? 01/02/03 olarak yıl için iki rakam kullanırsanız daha da kötüleşir.

Bu nedenle YYYYMMDD'yi kullanıyorsunuz, tarihler hakkında net bir şekilde iletişim kurmamızı sağlayan sözleşme, 20030201 tarihinin her zaman açık olduğu gibi. (ve sıralamayı kolaylaştırır)

(Şimdi bunu 20 milyon 30 bin 2 yüz ve 1 tamsayısı olarak saklamayınız.


14
"20030201, tarih olarak her zaman açıktır" : Bu kesinlikle böyle değil. YYYYMMDD'nin (veya YYYYDDMM veya DDMMYYYY? ... olduğu mu) bilmiyorsanız, "01/02/2003" kadar belirsizdir. HER ZAMAN tarihin biçimini bilmeniz gerekir; işleri netleştiren hiçbir "sözleşme" yoktur.
skomisa

6
@ skomisa bu oldukça yanlış. ISO 8601, uluslararası standart tarih formatını özellikle belirttiğiniz nedenlerden dolayı tanımlamıştır. Diğer biçimlere hiçbiri geçerli tarih biçimleri ve 19880605 beri olmamıştır
K. Alan Bates

11
Biz ISO 8601. göre ayrıştırılması gerektiğini varsayalım sürece @ tarihiniz belirsiz K.AlanBates
Goyo

16
20030201 20 Mart 201AD, değil mi?
David Richerby

10
@Martijn, ancak dile özgü. Türkiye'de ise Şubat yerine Şubat ayları (Kodunuzun işe yaradığını düşünmeden önce daima Türkiye'yi kontrol edin ).
NH.

19

T1 ve t2'nin YYYYMMDD formatında iki kere yazılan farklı tam sayılar olmasına izin verin. Daha sonra t1 <t2, t2'nin t1'den sonra gerçekleştiğini belirtir.

DD ve MM ilk biçimlendirmesiyle bu siparişi kaybedersiniz.

ISO, IMO, tek mantıklı format.


1
Bunu asla bir tamsayı olarak saklamamanız dışında, en azından ben hiç görmedim ya da düşünmedim.
boru

5
@pipe: İnan bana, bazı insanlar yapar. YYYYMMDD'yi tamsayılar olarak saklayan eski bir sistemi koruyoruz. Tasarım muhtemelen kesin bir tarih türü olmayan bazı eski veritabanı sistemlerinde ortaya çıktı ve geriye dönük uyumluluk için tutuldu. Güzel değil. Yapma
Heinzi

19
Her ne kadar makul bir kişi "Ama asla X yapmazsın" demek isterse, yazılım endüstrisindeki deneyimim olmuştur, her zaman en az bir karşı örnek vardır
Joseph Rogers

5
@pipe Veri ambarı yaparken, tarih tablosu için birincil / yedek anahtar olarak yyyymmdd tamsayısını kullanmak nadir değildir.
soapygopher 25:18

4
Pip, iyi, bir DNS bölgesinin sıra numarası, bölge değiştiğinde arttırılması gereken 32-bit bir tamsayıdır. Sadece basit bir sayı olsa da, ortak bir deyim, 2018092601 gibi sayıları kullanmaktır ... O zaman, POSIX.1-2008’deki özelliklerin desteklendiği araçlara feature_test_macros(7)sahip _POSIX_C_SOURCE > 200809Lolmak gibi , tarif edilen bazı sihirli sayılar tanımları vardır ...
ilkkachu

12

Bahsedilmeyen noktalardan biri, etkileşimli girdilerde, bu formatın girişi kontrol etmesine izin verdiğidir.

Sistem, bir ayın belirli bir yılı ve ayı bilmeden 28, 29, 30 veya 31 günü olup olmadığını bilemez. Etkileşimli giriş o yıl ve ayın başına geldiğinde, en son eklenen günün izin verilen aralıkta olup olmadığını kontrol edebilir.

Kabul edilirse, soru büyük ölçüde tarih biçimiyle ilgiliydi, ancak tarih biçiminin kullanıcıya sunulan biçimlendirmeyi takip ettiği söylenebilir.


7

YYYYMMDD siparişleri, sipariş verdiğiniz şekilde düzenlenir: ilk önce en önemli kısım. MMDDYYYY, "yüz yirmi üç" kelimesini "yirmi yüz" olarak yazmak gibi bir şey olur.

Kültürümüzde MMDDYYYY'nin doğal bir anlayışına sahibiz, çünkü insanlar olarak zaman farkındalığımız var ve yıllar yavaş ilerliyor. Genellikle hangi yıl olduğunu biliyoruz. Yılı görmek nadiren önemlidir, bu yüzden arkaya doğru iteriz. Aylar önemini koruyacak kadar hızlı değişiyor. Diğer kültürler bunu farklı şekilde ele alır. Dünyanın çoğu DDMMYYYY'yi tercih ediyor.


62
"Kültürümüzü" yeniden yazmak isteyebilirsiniz, çünkü benim kültürümde DDMMYYYY bu yüzden "bizim" kültürümüz değil sadece sizin
slebetman


9
Tuhaf bir argüman gibi görünüyor: "Aylar önemini koruyacak kadar hızlı bir şekilde değişti" -> Neden o zaman daha da hızlı değiştiğinden ilk günü seçmiyorsun?
Wim Deblauwe

7
@JoelCoehoorn, bu açık yapmak kolaydır ("ABD kültürümüzde"). "bizim" / "biz" genellikle burada "yığın değiştirme topluluğu" anlamına gelir.
AnoE

14
Kesinlikle. Stackoverflow uluslararasıdır . ABD merkezli olduğunuzu söylemeniz, ima etmeniz veya başkalarının da olma olasılığını arttırmanız gerekmez. Buradaki okuyucularınızın yeri hakkında herhangi bir varsayımda bulunamazsınız, onlar dünyanın her yerinde. Ve okuyucularınızın çoğu ne siz, ne de OP değil, cevabınızı Google’da bulan diğer insanlar olacaktır. Bu yorum, yaşadığınızdan farklı bir kıtaya yazılmıştır. Ve kendi - ehm - ilginç alışkanlıklarımız olsa da, burada kesinlikle MM / DD / YYYY
kullanmıyoruz

6

Sıralamadan bahsedilmiştir, ancak bugüne kadar yapmak için en faydalı neden, bunları "dizge" olarak karşılaştırmaktır ve evet, aynı şekilde 26 karakterli bir zaman damgası da sipariş edilir.

Bu tür karşılaştırmaların sıralama için zorunlu olduğunu biliyorum, ancak genellikle 2 elemanlı sıralama için kullanışlıdır.

Bunun kabul edilmediği projeler üzerinde çalıştım ve evet, programcılar tarihleri ​​karışık dizelerle karşılaştırmaya çalıştı.

Güzel biçimlendirme müşteri tarafında veya dizgi için.


5

Bu biçim, dizelerin alfabetik sıralamasını tarihlerin kronolojik sırasına benzer yapar. Bu yararlıdır, çünkü birçok araç örneğin dosyaların adlarına göre alfabetik olarak sıralanmasını sağlar, ancak dosya adlarından rasgele biçimlendirilmiş tarihleri ​​ayrıştırmanın ve bunlara göre sıralamanın bir yolunu yoktur.


4

Kısıtlılık hakkında. YAR, AY ve GÜN'ü parametre olarak düşünün, YYYYMMDD biçiminde her parametre öncekinden daha kısıtlayıcıdır.

Böylece, 1970'de olan bir şeyi aramak "1970*"istiyorsanız, baştan başlayarak bir dize arayarak yapabilirsiniz , ancak hangi ayın olduğunu hatırlarsanız, ayı gibi ekleyebilirsiniz "197005*". Bu şekilde, tarihin her "parametresi" size daha ayrıntılı bilgi verir.

Daha az spesifik bilgi ( "1970*") 'den daha spesifik bilgi' ye ( "19700523") geçmek için tek yol bu .


3
Gerçekten harika bir tartışma değil - belirli yıllarda değil, belirli yıllarda gerçekleşen şeyleri aramak da yaygındır.
Kübik

1
Eğer 1970*ve 197005*"glob" joker karakter sözdizimini temsil ediyorsa , o zaman glob'u arayarak *1970veya MMDDYYYY tarihlerini arayabilirsiniz 05*1970. Cevabınız açıkça açıkça bahsetmediğiniz bazı ekstra kısıtlamaları varsayar ve varsayımınızı açıklayarak geliştirilebilir.
Quuxplusone

3
Bu bir yan etki veya başka cevapların bahsettiği sıralama anahtarı sırasını tanımlamanın başka bir yoludur. Ancak, bu açıklama önekleri aramayla kısıtlamadığınız sürece dağılır. (Dizini için daha kolay, ancak hiçbir şekilde gerekli değildir).
Peter Cordes

Aynı zamanda, nispeten basit regexp's ile tarih dizisini seçebileceğiniz anlamına gelir ...
Harper

1

Neden programlamada varsayılan tarih formatı YYYYMMDD ...

Giriş ve çıkış için okunabilir bir formattır, mutlaka bu şekilde depolanması gerekmez.

Tüm programlama dillerinin üçte birinden fazlası İngilizce olan ve ana dil olarak İngilizce olan bir ülkede geliştirildi ve modern olanların çoğu bir tanım standardına uyuyor - tarihler için uluslararası standart ISO 8601 .

Daha fazla bilgi: (TMI?)

Zaman değiştikçe, genellikle ileriye doğru, günler ilk önce artar, sonra aylar, son olarak yıllar - ondalık tarihler olup olmadığımızı (ve ondalık süremiz ) anlamamız daha kolay olabilir - zaman geçtikçe sayı büyür. İnsanların sayıya bakması ve bir bakışta başka bir tarihle karşılaştırması daha kolay.

Bilgisayar hangi yapıyı kullanmak istediğinizi umursamıyor ve çoğu (ama hepsinde değil ) bilgisayarlarında ikili mantık kullanılıyor - e tabanı aslında en düşük yarıçap ekonomisine sahip ancak tam bir sıra için en verimli ve en kolay değil .

Tarihler için gerçek girdi ve çıktı biçimi ülkeye göre değişir ve yerelleştirmeye göre ayarlanır , YYYYMMDD bugün için en mantıklı olanıdır ve alışkın olduğunuz şey evrensel görünmeyebilir , geçmişte de öyle değildi . En uzun süre henüz bugün bile Romen rakamları vardır yaygın tarihleri için kullanılan .

Önümüzdeki yılı bilmek, bir yıl içindeki gün sayısını, bir yıl boyunca sürebilecek en büyük değişimin olduğunu söyler. Her aydaki izlemeniz gereken gün sayısını (giriş sırasındaki hata kontrolü için) önceden bildirir, bir sonraki yıl girişinizi kabul etmediyse ilk gün girişine izin vermek sizi destekleyebilir - muhtemelen erişilebilir girişi zorlaştırır . Takvim formatı açısından da önemi vardır . Ayrıca ondalık yıldız tarihleriyle geek takvimine bakın .

Bilgisayar söz konusu olduğunda, UNIX Epoch zamanını , 00:00:00 'den beri geçen saniye sayısını, her gün içeriyormuş gibi muamele ettiği 1 Ocak 1970, Perşembe, UTC) kullanması muhtemeldir. tam olarak 86400 saniye. Jülyen gününe de bakınız . YYYYMMDD formatı, çok merkezli insanlar tarafından basitçe tercih edilir, IAU, aksi belirtilmediği sürece , bir yılı 365.25 günlük (31.5576 milyon saniye) Julian yılı olarak görür.


1
Aslında tanıdığım hemen hemen her insan ve yazılım parçası başka bir formatı tercih ediyor.
Goyo

1
Tanıştığımıza memnun oldum! Ben Dave, ve YYYYMMDD'yi tercih ediyorum
Reversed Engineer

0

Bu gösterim için gördüğüm diğer bir kullanım, tarihleri ​​yalnızca tarih başına 4 bayt kullanarak tam sayılar olarak (yani bir veritabanında) saklayabilmenizdir. YYYYMMDD kullanmak, daha sonra tamsayı karşılaştırmalarının (genellikle tek bir makine talimatı), temsil edilen tarihte yapılan karşılaştırmalarla aynı sonuca sahip olduğu anlamına gelir. Ve orta derecede insan tarafından kolayca basılabilir. Ve bunların hiçbiri, herhangi bir ana programlama ortamında, herhangi bir kod veya özel bir destek gerektirmez.

Bu şeyler, tarihlerle yapmanız gerekenlerin çoğunu oluşturuyorsa ve çoğunu yapmanız gerekiyorsa, bu biçimin çok çekiciliği vardır.

Buna karşılık, DD / MM / YYYY gibi ortak biçimlerde tarihler, ASCII karakterlerinin dizeleri olarak 10 bayt alır. YYYYMMDD dizeleri bunu 8'e düşürür ve "gösterimleri karşılaştırmak tarihleri ​​karşılaştırmakla aynı sonucu verir" avantajını elde eder, ancak o zaman bile dize tabanlı karşılaştırma, tek bir tamsayı karşılaştırması yerine karakter karakterdir.


2
Bir tarihi üç bayta paketlemek önemsizdir. 0000 ~ 9999 aralığı, 14 bit gerektirir, 01 ~ 12, 4 bit gerektirir ve 01 ~ 31, 23 bitin toplamı için 5 bit gerektirir. Kalan biti de üç baytlık miktarda kullanarak, bir günlük çözünürlüğü koruyarak 32.768 yıllık bir süre boyunca tarihleri ​​temsil edebilirsiniz. Bu, örneğin, M.Ö. 8191 ile 24576 yılları arasındaki tarihleri ​​temsil etmek için kullanılabilir. Bitleri, örneğin, yyyyyyyyyyyyyyyyymmmmddddd gibi paketleyerek, ondalık gösterimi doğrudan karşılaştırılabilir kalır (doğrudan insan tarafından okunabilir olmasa da, veritabanının fiziksel depolamasına kim önem verir?).
bir CVn

0

Ayın yeşil peynirden yapılmış olmasının sebebi aynı: değil. Çoğu durumda, varsayılan biçim bir tür yerelleştirilmiş dizedir. Bazen ISO formatı kullanılır, ancak daha iyi okunabilirlik için genellikle kısa çizgilerle kullanılır. YYYYMMDD(veya %Y%m%diçinde strftimetabiriyle) nadiren varsayılan değerdir. Adil olmak gerekirse, onu gördüğüme eminim ama şu anda bir örnek düşünemiyorum.

Unix tarihi (GNU çekirdek yardımcı programları)

date

Çıktı:

Wed Sep 26 22:20:57 CEST 2018

piton

import time
print(time.ctime())

çıktı:

Wed Sep 26 22:27:20 2018

C

#include <stdio.h>
#include <time.h>

int main () {
   time_t curtime;

   time(&curtime);
   printf(ctime(&curtime));
   return(0);
}

Çıktı:

Wed Sep 26 22:40:01 2018

C ++

#include <ctime>
#include <iostream>

int main()
{
    std::time_t result = std::time(nullptr);
    std::cout << std::ctime(&result);
}

Çıktı:

Wed Sep 26 22:51:22 2018

JavaScript

current_date = new Date ( );
current_date;

Çıktı:

Wed Sep 26 2018 23:15:22 GMT+0200 (CEST)

SQLite

SELECT date('now');

Çıktı:

2018-09-26

LibreOffice Calc

görüntü tanımını buraya girin

Gnumeric

görüntü tanımını buraya girin

OnlyOffice

görüntü tanımını buraya girin

Python + numpy

import numpy as np
pd.datetime64('now')

Çıktı:

numpy.datetime64('2018-09-26T21:31:55')

Python + pandalar

import pandas as pd
pd.Timestamp('now', unit='s')

Çıktı:

Timestamp('2018-09-26 21:47:01.277114153')

Yazılım Mühendisliği

görüntü tanımını buraya girin

apport.log

ERROR: apport (pid 9742) Fri Sep 28 17:39:44 2018: called for pid 1534, signal 6, core limit 0, dump mode 2

alternatives.log

update-alternatives 2018-05-08 15:14:24: run with --quiet --install /usr/bin/awk awk /usr/bin/mawk 5 --slave /usr/share/man/man1/awk.1.gz awk.1.gz /usr/share/man/man1/mawk.1.gz --slave /usr/bin/nawk nawk /usr/bin/mawk --slave /usr/share/man/man1/nawk.1.gz nawk.1.gz /usr/share/man/man1/mawk.1.gz

bardaklar / access.log

localhost - - [28/Sep/2018:16:41:58 +0200] "POST / HTTP/1.1" 200 360 Create-Printer-Subscriptions successful-ok

syslog

Sep 28 16:41:46 pop-os rsyslogd:  [origin software="rsyslogd" swVersion="8.32.0" x-pid="946" x-info="http://www.rsyslog.com"] rsyslogd was HUPed

10
Argümanınıza eklemek için, kaç tane komut dosyası çalıştırdığınız bilgisayardaki kullanıcı ayarları nedeniyle bu şekilde biçimlendirilmiş?
Topher Brink

İlki gerçekten "bash" değil, tarih programı (ve Do 27. Sep 22:27:09 CEST 2018burada çıktı .)
Paŭlo Ebermann 27:18

@ PaŭloEbermann Haklısın, umarım şimdi daha iyidir. Dediğim gibi, bu biçimlerin çoğu yerelleştirilmiştir, bu nedenle gördüğünüz gerçek biçim yerelleştirme seçeneklerine bağlı olacaktır.
Goyo

3
Bu cevabın amacı son kullanıcı odaklı uygulamalar için doğru olsa da, sistemler arasındaki veri alışverişi, veri serileştirme, mesaj / veri protokolleri, kayıt, izleme, hata ayıklayıcılar vb. İçin geçerli değildir. ISO 8601 standardı, sistem yöneticilerine ve programcılarına yönelik bu tür kullanımlar için hızla norm haline geliyor. Uluslararası veya yerel agnostik senaryolar için aynı.
Basil Bourque

@BasilBourque Teşekkürler, kendi sistemimde bulduğum kayıtların rastgele bir örneğini ekledim. Kullanışlı diğer türlerden örneklerim yok. Ancak, belirli alanlarda varsayılan olarak ISO 8601'e yönelik bir eğilimin, diğer biçimlerde varsayılan olan çok sayıda yazılım karşısında temel programlama türünü "programlamada varsayılan" yaptığını düşünmüyorum.
Goyo

-1

Şimdiye kadar belirtilmeyen ilave bir avantaj, arzu edilen nicelleştirmenin (aynı genel değer aralığına ait kesin bir değer atamak) nispeten kolay ve hızlı bir tek işlem olmasıdır.

Satışların toplamı ve sayısı gibi bugünkü olayları özetleyen bir rapor yazdığınızı varsayalım. Satış tarihi ve saati YYYYMMDDHHMISS olarak saklanır, tarihinizi satış gününe düşürmek için en soldaki 8 karakteri (bir dizge ise) veya tam sayıdaki bölmeyi (yani kat) 1.000.000 değerinde tutmanız gerekir.

Benzer şekilde, ayın satışını istiyorsanız, yalnızca en soldaki 6 haneyi tutarsanız veya 100.000.000’e böldüyseniz

Elbette, herhangi bir dizi manipülasyonunun mümkün olduğunu iddia edebilirsiniz, "12-25-2018 12:34" satışının tarih ve saatini ay ve yılı elde etmek için birçok kez bastırabilir ve değiştirebilir. Sayısal formda 122520181234 bölünmüş ve modellenmiş ve çarpılmış ve biraz daha bölünmüş olabilir ve sonunda bir ay ve bir yıl da üretebilir .. .. ama kodun yazılması, okunması, bakımı ve anlaşılması zor olurdu.

Ayrıca, karmaşık veritabanı en iyi duruma getiricileri bile, tarih biçimi MM / DD / YYYY ise, ancak kesilip tekrar birleştirildiyse, bir sütun için bir dizindeki bir dizini kullanamayabilir. Buna karşılık, bir YYYYMMDD temsilini saklamak ve Aralık 2018'i istemek, ilk dateasstring LIKE '201812%'ya da dateasint BETWEEN 20181200 and 20181299- bir dizinin kolayca kullanılabileceği bir maddeye yol açar.

Böylece, tarihler için özel bir veri türü yoksa ve dize / sayısal gösterim tek seçimdi, en soldaki en kısa aralıktaki en uzun aralıktaki en kısa aralıktaki gösterimi kullanarak zamanları kullanmak ve saklamak hakkın anlaşılma, manipülasyon, depolama, geri alma ve kod bakım kolaylığı için oldukça az yararı var

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.