Apakah ada rekayasa alasan mengapa seperti itu? Aku bertanya-tanya dalam kasus RDBMS yang ada hubungannya dengan kinerja, karena "TAHUN" lebih spesifik daripada "BULAN", misalnya: anda hanya memiliki satu tahun 2000, tapi setiap tahun memiliki "januari", yang akan membuat lebih mudah/lebih cepat untuk menyaring dan mengurutkan sesuatu dengan tahun pertama, dan yang's mengapa tahun datang pertama.
Tapi aku don't tahu apakah itu benar-benar masuk akal... Apakah ada alasan sama sekali?
Dengan cara ini, tanggal dengan mudah dapat diurutkan sebagai string menggunakan default aturan pengurutan (yaitu leksikografis pengurutan).
Ini juga mengapa kedua bulan dan hari yang ditentukan menggunakan dua digit (menambahkan nol jika diperlukan).
Pada kenyataannya itu adalah salah satu dari format tanggal yang ditetapkan oleh ISO 8601. Standar itu juga menetapkan tanggal dan format waktu, 2015-03-27T15:26:40Z
, yang juga diurutkan sebagai string.
Namun, YYYYMMDD memiliki manfaat tambahan untuk membuat itu mungkin untuk mudah (tidak ada substring atau penggantian karakter yang terlibat) mengurai string sebagai integer, dan masih menggunakan default pengurutan pada bilangan bulat.
Tidak disebutkan, tapi anda dengan cepat mengabaikan perintah dalam YYYY. Yang's sudah ribuan tahun, berabad-abad, dasawarsa, tahun. Itu adalah untuk mengatakan, YYYY sudah memerintahkan terpanjang dari periode ke periode terpendek. Hal yang sama berlaku untuk MM dan DD, yang's berapa jumlah sistem bekerja.
Jadi untuk menjaga agar between bidang sesuai dengan urutan within bidang, satu-satunya pilihan adalah YYYYMMDD.
Sebagai zahbaz dan Arseni Mourzenko mencatat, format YYYYMMDD macam dengan mudah. Itu bukan sebuah kebetulan, bahwa's konsekuensi langsung menempatkan bidang untuk durasi terpanjang pertama (dan menjaga suhu udara tetap; kami adalah memperkenalkan Y10K masalah di sini.)
Apakah ada alasan sama sekali?
Ya. Potongan-potongan perangkat lunak akan menggunakan ISO 8601.
ISO 8601 memiliki sejumlah keunggulan dibandingkan lainnya format tanggal:
1_file, 10_file, 2_file
).Adapun mengapa ISO 8601 ada di tempat pertama, itu's karena orang-orang yang menemukan tanggal-format ambigu dan membingungkan ketika menukar data antara negara/sistem, dan mereka membutuhkan sesuatu yang ambigu.
Untuk alasan melihat spec's pendahuluan.
Meskipun ISO Rekomendasi dan Standar di bidang ini telah tersedia sejak tahun 1971, bentuk yang berbeda dari representasi numerik dari tanggal dan waktu yang telah umum digunakan di negara-negara yang berbeda. Dimana pernyataan yang dipertukarkan melintasi batas-batas nasional salah tafsir makna dari angka-angka yang dapat terjadi, mengakibatkan kebingungan dan lainnya akibat kesalahan atau kerugian. Tujuan dari Standar Internasional ini adalah untuk menghilangkan risiko terjadinya salah tafsir dan untuk menghindari kebingungan dan konsekuensinya.
...
Standar Internasional Ini tetap yang paling sering digunakan ekspresi untuk tanggal dan waktu di malam hari dan mereka representasi dari sebelumnya Standar Internasional dan unik menyediakan representasi untuk beberapa baru ekspresi yang digunakan dalam praktek. Penerapannya dalam pertukaran informasi, terutama antara sistem pengolahan data dan peralatan yang terkait akan menghilangkan kesalahan yang timbul dari kesalahpahaman dan biaya ini menghasilkan. Yang promosi dari Standar Internasional ini tidak hanya memfasilitasi pertukaran melintasi batas-batas internasional, tetapi akan juga meningkatkan portabilitas perangkat lunak, dan akan meringankan masalah komunikasi di dalam suatu organisasi, serta di antara organisasi.
Standar mendefinisikan "dasar" variasi seperti meminimalkan penggunaan pembatas. Jadi, YYYYMMDD
adalah dasar alternatif untuk diperpanjang format YYYY-MM-DD
.
It's karena semua cara lain untuk melakukan hal yang ambigu.
01/02/2003 apa artinya? Januari kedua tahun 2003? Atau di Eropa: 1 februari 2003? Hal mendapatkan bahkan lebih buruk jika anda menggunakan dua digit untuk tahun, sebagai 01/02/03.
Itulah mengapa anda menggunakan YYYYMMDD, it's konvensi yang memungkinkan kita untuk berkomunikasi dengan jelas tentang tanggal, 20030201 sebagai tanggal selalu jelas. (dan itu membuat lebih mudah untuk memilah -)
(Sekarang don't go menyimpan itu sebagai integer 20 juta 30 ribu 2 ratus dan 1. mohon ok? cukup menyenangkan?)
Mari t1 dan t2 menjadi berbeda bilangan bulat yang mewakili dua kali ditulis dalam format YYYYMMDD. Kemudian t1 < t2 menyiratkan bahwa t2 terjadi setelah t1.
Anda kehilangan pemesanan ini dengan DD MM dan pemformatan pertama.
ISO, IMO, satu-satunya yang masuk akal format.
Salah satu titik yang tidak disebutkan adalah bahwa, di input interaktif, format ini memungkinkan untuk mengontrol input.
Sistem ini tidak tahu jika bulan memiliki 28, 29, 30 atau 31 hari tanpa mengetahui spesifik tahun dan bulan. Ketika interaktif input mengamanatkan bahwa tahun dan bulan datang pertama dapat memeriksa jika hari (dimasukkan terakhir) adalah dalam rentang yang diijinkan.
Diberikan, pertanyaan itu sebagian besar tentang format tanggal, tetapi hal ini dapat dikatakan bahwa format tanggal mengikuti format yang disajikan kepada pengguna.
YYYYMMDD pesanan tanggal dengan cara yang sama anda perintah nomor: paling signifikan bagian pertama. MMDDYYYY akan sama seperti menulis "seratus dua puluh tiga" seperti "dua puluh dan seratus tiga".
Dalam budaya kita, secara alami kita memiliki pemahaman MMDDYYYY karena, sebagai manusia, kita memiliki kesadaran waktu, dan tahun yang berlangsung perlahan-lahan. Kita umumnya tahu apa tahun itu. Melihat tahun jarang hal-hal, jadi kami dorong ke belakang. Bulan perubahan atas hanya cukup cepat untuk mempertahankan kepentingan mereka. Budaya lain menangani hal ini differnently. Jauh dari dunia lebih memilih DDMMYYYY.
Sorting telah disebutkan, tetapi yang paling berguna alasan untuk melakukan ini adalah untuk membandingkan mereka sebagai "strings", dan ya 26 karakter timestamp memerintahkan demikian.
Saya sadar perbandingan tersebut sangat penting untuk menyortir, tetapi umumnya berguna untuk 2 elemen semacam.
Saya telah bekerja pada proyek-proyek di mana hal ini tidak diadopsi, dan ya, programmer mencoba (dengan hasil yang beragam) untuk membandingkan tanggal sebagai string.
Cukup format untuk sisi klien atau typesetting.
Format ini membuat urutan abjad dari string identik dengan urutan kronologis dari tanggal. Hal ini berguna karena banyak alat-alat yang memberikan abjad pemesanan misalnya file dengan nama, tapi tidak ada cara untuk mengurai sewenang-wenang-format tanggal dari nama file dan mengurutkan oleh orang-orang.
It's tentang keterbatasan. Bayangkan TAHUN, BULAN dan HARI sebagai parameter, dalam format YYYYMMDD masing-masing parameter yang lebih ketat dari sebelumnya.
Jadi jika anda ingin mencari sesuatu yang terjadi pada tahun 1970, anda dapat melakukannya dengan mencari string yang dimulai dengan "tahun 1970*"
, tapi jika anda ingat di mana bulan adalah anda dapat menambahkan bulan seperti "197005*"
. Cara ini setiap "parameter" tanggal memberi anda informasi yang lebih spesifik.
It's satu-satunya cara untuk pergi dari kurang spesifik info ("tahun 1970*"
) untuk info lebih spesifik ("19700523"
).
Mengapa, dalam pemrograman, default format tanggal adalah YYYYMMDD ...
It's format yang mudah dibaca untuk input dan output, it's tidak selalu disimpan dengan cara itu.
Lebih dari sepertiga dari semua bahasa pemrograman yang dikembangkan di negara dengan bahasa inggris sebagai bahasa utama dan paling modern yang mematuhi Standar dari beberapa keterangan - Standar internasional untuk tanggal ISO 8601.
Info lebih lanjut: (TMI?)
Seiring perubahan waktu, biasanya maju, hari kenaikan pertama, kemudian bulan, tahun terakhir - mungkin akan lebih mudah untuk memahami jika kita memiliki desimal tanggal (dan desimal waktu) - seiring berjalannya waktu jumlah akan lebih besar. It's hanya lebih mudah bagi manusia untuk melihat nomor dan membandingkannya dengan tanggal lain sekilas.
Komputer doesn't perawatan struktur apa yang ingin anda gunakan, dan di sebagian besar (tetapi tidak semua]5) komputer logika biner adalah digunakan - dasar e benar-benar memiliki terendah radix ekonomi tetapi isn't yang paling efisien maupun termudah untuk urutan lengkap.
Sebenarnya input dan output format untuk tanggal pilihan oleh negara dan diatur oleh lokalisasi, sedangkan YYYYMMDD mungkin tampak untuk membuat paling masuk akal dan menjadi apa yang anda digunakan untuk itu isn't universal hari ini, juga bukan cara yang di masa lalu untuk waktu yang lama, namun, bahkan hari ini Romawi adalah yang biasa digunakan untuk tanggal.
Mengetahui tahun dimuka memberitahu anda jumlah hari dalam setahun, terbesar variasi dalam durasi bahwa tahun ini dapat menjalani. Ini memberitahu anda dimuka jumlah hari dalam setiap bulan untuk mengikuti (untuk memeriksa kesalahan saat entry), yang memungkinkan masukan dari hari pertama mungkin harus kembali ke anda jika tahun berikutnya tidak setuju dengan masukan anda - mungkin membuat diakses input lebih sulit. Itu juga memiliki kepentingan berkaitan dengan kalender format. Lihat juga geek kalender, dengan desimal stardates.
Sejauh komputer yang bersangkutan itu's mungkin untuk menggunakan UNIX Epoch time, jumlah detik yang sudah berlalu sejak 00:00:00 UTC (Coordinated Universal Time), kamis, 1 januari 1970, di mana setiap hari diperlakukan seolah-olah itu berisi persis 86400 detik. Lihat juga Julian day. Dengan format YYYYMMDD hanya disukai oleh egosentris manusia, IAU menganggap tahun ini sebagai tahun Julian dari 365,25 hari (31.5576 juta detik) kecuali ditentukan lain.
Penggunaan lain I've melihat representasi ini adalah bahwa anda dapat menyimpan tanggal sebagai bilangan bulat (yaitu dalam database), hanya menggunakan 4 byte per tanggal. Menggunakan YYYYMMDD maka berarti bahwa perbandingan bilangan bulat (sering sebuah mesin tunggal instruksi) memiliki hasil yang sama seperti perbandingan pada tanggal diwakili. Dan mencetak cukup manusia-readably. Dan semua ini tidak membutuhkan kode atau dukungan khusus di semua, di setiap mainstream lingkungan pemrograman.
Jika hal-hal tersebut adalah sebagian besar dari apa yang perlu anda lakukan dengan tanggal, dan anda perlu untuk melakukan banyak hal, maka format ini memiliki banyak daya tarik.
Sebagai perbandingan, tanggal dalam format umum seperti DD/MM/YYYY mengambil 10 byte sebagai string dari karakter ASCII. YYYYMMDD string mengurangi yang ke 8 dan mendapatkan "membandingkan representasi memiliki hasil yang sama seperti membandingkan tanggal" keuntungan, tetapi bahkan kemudian string-berdasarkan perbandingan karakter-per-karakter lebih dari satu bilangan bulat perbandingan.
Alasan yang sama Bulan terbuat dari keju hijau: tidak. Dalam kebanyakan kasus format default adalah beberapa jenis string lokal. Kadang-kadang format ISO yang digunakan, tetapi biasanya dengan tanda hubung untuk dibaca lebih baik. YYYYMMDD
(atau %Y%m%d
di strftime
bahasa) jarang default. Untuk menjadi adil, saya yakin saya telah melihat hal itu tapi aku tidak bisa memikirkan contoh sekarang.
date
Output:
Wed Sep 26 22:20:57 CEST 2018
import time
print(time.ctime())
output:
Wed Sep 26 22:27:20 2018
#include <stdio.h>
#include <time.h>
int main () {
time_t curtime;
time(&curtime);
printf(ctime(&curtime));
return(0);
}
Output:
Wed Sep 26 22:40:01 2018
#include <ctime>
#include <iostream>
int main()
{
std::time_t result = std::time(nullptr);
std::cout << std::ctime(&result);
}
Output:
Wed Sep 26 22:51:22 2018
current_date = new Date ( );
current_date;
Output:
Wed Sep 26 2018 23:15:22 GMT+0200 (CEST)
SELECT date('now');
Output:
2018-09-26
import numpy as np
pd.datetime64('now')
Output:
numpy.datetime64('2018-09-26T21:31:55')
import pandas as pd
pd.Timestamp('now', unit='s')
Output:
Timestamp('2018-09-26 21:47:01.277114153')
ERROR: apport (pid 9742) Fri Sep 28 17:39:44 2018: called for pid 1534, signal 6, core limit 0, dump mode 2
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
localhost - - [28/Sep/2018:16:41:58 +0200] "POST / HTTP/1.1" 200 360 Create-Printer-Subscriptions successful-ok
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
Manfaat tambahan yang tidak disebutkan sejauh ini adalah yang diinginkan quantization (menetapkan tepat nilai sebagai milik umum yang sama rentang nilai) yang relatif mudah dan cepat operasi tunggal..
Misalkan anda're menulis laporan yang merangkum peristiwa-peristiwa hari ini, seperti jumlah dan jumlah penjualan. Penjualan tanggal dan waktu disimpan sebagai YYYYMMDDHHMISS, anda hanya perlu untuk menjaga paling kiri 8 karakter (jika itu's a string) atau integer dibagi (yaitu lantai) oleh 1.000.000 untuk mengurangi datetime untuk hari penjualan.
Demikian pula, jika anda ingin bulan's penjualan, anda tetap hanya 6 digit paling kiri, atau membagi dengan 100,000,000
Yakin, anda bisa berpendapat bahwa setiap manipulasi string adalah mungkin, datetime untuk penjualan "12-25-2018 12:34pm" bisa substringed dan dimanipulasi beberapa kali untuk mendapatkan bulan dan tahun. Dalam bentuk numerik 122520181234 bisa dibagi dan modded, dan dikalikan, dan dibagi lagi, dan akhirnya juga memproduksi bulan dan tahun.. ..tapi kode akan benar-benar sulit untuk menulis, membaca, mempertahankan dan memahami..
Dan bahkan database yang canggih pengoptimalan mungkin tidak dapat digunakan untuk membuat indeks pada kolom a di mana klausul apabila tanggal formulir adalah MM/DD/YYYY tapi dipotong dan potongan kembali bersama-sama.
Sebagai perbandingan, menyimpan YYYYMMDD representasi dan ingin desember 2018 mengarah ke mana klausul ilk dateasstring SEPERTI '201812%'
atau dateasint ANTARA 20181200 dan 20181299
- sesuatu indeks dapat dengan mudah digunakan untuk
Dengan demikian, jika ada't khusus tipe data untuk tanggal dan string/numerik adalah satu-satunya pilihan, menggunakan dan menyimpan kali dalam beberapa representasi terpanjang-interval-di-atas-kiri-ke-singkat-interval-on-the-benar memiliki beberapa manfaat untuk kemudahan pemahaman, manipulasi, penyimpanan, pengambilan dan pemeliharaan kode