프로그래밍에서 기본 날짜 형식이 YYYYMMDD이고 다른 것이 아닌 기술적 이유가 있습니까?


118

왜 그런 엔지니어링 이유가 있습니까? RDBMS의 경우, "YEAR"가 "MONTH"보다 더 구체적이기 때문에 성능과 관련이 있다는 것이 궁금합니다. 예를 들어 2000 년은 1 년이지만 매년 "January"는 연도별로 무언가를 필터링 / 정렬하기가 더 쉽고 빠르기 때문에 연도가 가장 먼저 나옵니다.

그러나 그것이 정말로 의미가 있는지 모르겠습니다 ... 전혀 이유가 있습니까?


14
@IMil 우리는 그것을 좋아하지 않을 수도 있지만, 종종 그것들은 문자열로 저장됩니다.
Honza Brabec

14
@candied_orange 특히 날짜의 경우에는 이상 할 것입니다.
glglgl


19
사이드 참고로,이 형식이 아닌 외계인입니다. 예를 들어 헝가리어 (어쩌면 다른 언어도) YYYY입니다. MM. DD. 기본 작성 날짜 형식이며 컴퓨터보다 오래 전부터 사용되었습니다.
Neinstein

31
프로그래밍에서 기본 날짜 형식은 "YYYYMMDD"입니까? 그것이 사실이라면 좋을 것입니다. 그러나 그것은 모든 곳에서 사실이 아닙니다. RFC 822 및 RFC 850과 ANSI C asctime는 여전히 많은 장소에서 널리 사용됩니다. RFC 3339 및 ISO 8601이 점차 이전 형식을 대체하고 있다는 점은 기쁜 일이며 앞으로도 계속 사용해야합니다. 더 일반적으로 ISO 8601 기본 형식 (분리 문자가없는 일반 YYYYMMDD)은 실제로 YYYY-MM-DD와 같은 다른 형식보다 일반적 이라고 말할 수 있습니다.
Daniel Pryden

답변:


386

이런 방식으로 날짜는 기본 정렬 규칙을 사용하여 문자열로 쉽게 정렬 할 수 있습니다 (예 : 사전 정렬 ).

이것은 또한 월과 일이 두 자리 숫자로 지정되는 이유입니다 (필요한 경우 앞에 0을 추가 함).

실제로 그것은 ISO 8601에 의해 정의 된 날짜 형식 중 하나입니다 . 이 표준은 날짜 및 시간 형식도 정의하며 2015-03-27T15:26:40Z문자열로도 정렬 할 수 있습니다.

그러나 YYYYMMDD는 문자열을 정수 로 쉽게 구문 분석하고 정수에서 기본 순서를 계속 사용할 수 있도록하는 추가 이점이 있습니다 .


90
@lucaswxp : 특정 스키마를 따르는 문자열에 대한 특수 사례 비교를 작성하는 경우 물론 원하는대로 바로크를 만들 수 있습니다. 여기서 중요한 것은 어휘 순서 (어휘 번호 인식 순서)와 논리 순서도 논리적 순서이므로 스키마를 사용자 정의 할 필요가 없다는 것입니다.
중복 제거기

19
@lucaswxp 날짜 문자열이 메모리에 없을 수 있습니다. 실제 예 : 이미 ISO 날짜 및 연간 수백만 개 이상의 행으로 정렬 된 csv 파일이 있습니다. 그리고 특정 날짜 사이의 행만 반환하려고합니다. 첫 번째 날짜에 도달 할 때까지 파일을 한 줄씩 (행별로) 읽은 다음 마지막 날짜에 도달 할 때까지 행을 메모리에로드 할 수 있습니다. 나머지 파일은 건너 뛸 수 있습니다. 그러나 날짜를 다른 형식으로 저장하거나 연도별로 정렬하면 파일을 닫기 전에 1 년 동안의 전체 레코드를 읽어야합니다.
Tom A. Vibeto

48
대시는 ISO 8601에서 옵션이므로 YYYYMMDD ISO 8601입니다.
Martin Ba

32
@Benoit Y10K 문제를 해결하기위한 제안이 이미 작성되었습니다. 우리가 여전히 같은 시대를 사용하고 있다면 Y100K까지 AYYYYYMMDD로 이동합니다. BYYYYYYMMDD, CYYYYYYYMMDD, DYYYYYYYYMMDD, EYYYYYYYYYMMDD입니다. 이 선행 알파 접두사는 올바른 정렬 순서를 보장합니다 (YYYY ... 날짜가 계속 사용되는 경우 "A0YYYY ..."등이 유효하지 않은 표현 인 경우). 연도 수가 3으로 나눌 수있는 시점에서, 우리는 우주의 열사병 전에 문자가 부족하지 않도록하기 위해 알파 접두사를 변경할 때마다 3 자리 숫자를 추가하기 시작합니다.
Monty Harder

35
이 형식을 사용하면 정렬이 "간단한"것이 아니라는 점에 유의해야합니다. 어휘 (문자 기반) 정렬은 시간 정렬과 동일하므로 구문 분석없이 시간적으로 정렬 할 수 있습니다 .
jpmc26

135

아직 언급되지 않았지만 YYYY 내부 의 주문을 빠르게 처리합니다 . 그것은 이미 수천 년, 수십 년, 수십 년입니다. 즉, YYYY는 이미 가장 긴 기간에서 가장 짧은 기간으로 주문됩니다. MM과 DD도 마찬가지입니다. 이것이 바로 숫자 시스템의 작동 방식입니다.

따라서 필드 사이 의 순서 필드 내의 순서와 일치시키기 위해 유일한 옵션은 YYYYMMDD입니다.

zahbaz와 Arseni Mourzenko가 지적했듯이 YYYYMMDD 형식은 쉽게 정렬됩니다. 이는 운이 좋은 우연의 일치가 아니며, 가장 긴 기간 동안 필드를 먼저 배치하고 길이를 고정 된 상태로 유지하는 직접적인 결과입니다. 여기서는 Y10K 문제를 소개합니다.


34
농담하는 동안이 코드는 8000 년 후에 심각하게 우리를 괴롭힐 수 있습니다. Code
deceze

15
@deceze ISO8601에는 이미 5 자리 연도의 조항이 있지만 현재 어떤 DateTime 구현에서 허용되는지 확인하는 것이 흥미로울 것입니다.
Zac Faragher

4
@ ZacFaragher, 나중에 구현할 시간이 충분할 것이라고 확신합니다. 서두를 필요가 없습니다.
ilkkachu

51
@deceze 왜 당신은 나를 동결 해제 했습니까? 아니요, 9999 년이며 COBOL을 알고 있습니다.
user3067860

6
오타를 수정하고 싶을 수도 있습니다. 밀레니엄 의 복수형 인 밀레니아 ( millennia ) 라는 단어 는 연중 라틴어 아 누스 에서 매년 더블 N과 일치하는 더블 N으로 철자가 철자되어 있습니다. 단 하나의 N만으로 철자를 잘못 입력하면 영어 스포츠에 대한 대출 단어와 같은 의미로 라틴어 항문항문 N과 불행하게 일치합니다 . 간단히 말해, 수천 개의 엉덩이 구멍이 아니라 수천 년 동안 이야기하는 방식으로 항상 철자를 써야합니다. :)
tchrist

57

전혀 이유가 있습니까?

예. 이러한 소프트웨어는 ISO 8601을 사용 합니다.

ISO 8601은 다른 날짜 형식에 비해 여러 가지 장점이 있습니다.

  • 사양 문서가있는 표준입니다 :)
  • 모호하지 않습니다. mm / dd / yyyy 및 dd / mm / yyyy는 13 일이 지나지 않으면 혼동 될 수 있습니다.
  • 사전 순으로 오름차순으로 정렬되므로 특별한 날짜 정렬 논리가 필요하지 않습니다. 이것은 사전 식 번호 정렬이 종종 혼동되는 파일 이름에 특히 유용합니다 (예 :) 1_file, 10_file, 2_file.
  • 4 자리 연도와 0으로 채워진 월과 연도를 요구합니다. 이것은 2000 년 문제와 다른 모호성을 피합니다.

에 관해서는 ISO 8601은 처음부터 존재, 국가 / 시스템간에 데이터를 교환 할 때 사람들이 날짜 형식이 모호하고 혼란을 발견했기 때문에 그것은, 그리고 그들은 명확한 무언가를 필요로했다.

이론적 근거는 사양 소개를 참조하십시오 .

이 필드의 ISO 권장 사항 및 표준은 1971 년부터 제공되었지만 날짜와 시간에 대한 여러 가지 숫자 표시 형식이 여러 국가에서 공통적으로 사용되었습니다. 이러한 표현이 국가 경계를 넘어서 교환되는 경우, 숫자의 중요성에 대한 오해가 발생할 수 있으며, 그 결과 혼동 및 기타 결과적 오류 또는 손실이 발생합니다. 이 국제 표준의 목적은 오해의 위험을 없애고 혼란과 그 결과를 피하는 것입니다.

...

이 국제 표준은 날짜와 시간에 가장 일반적으로 사용되는 표현과 이전 국제 표준의 표현을 유지하며 실제로 사용되는 일부 새로운 표현에 대한 고유 한 표현을 제공합니다. 특히 데이터 처리 시스템과 관련 장비 간의 정보 교환 응용 프로그램은 잘못된 해석으로 인해 발생하는 오류와 이로 인해 발생하는 비용을 제거합니다. 이 국제 표준의 홍보는 국제 경계를 넘어서 상호 교환을 용이하게 할뿐만 아니라 소프트웨어의 이식성을 향상 시키며 조직 내뿐만 아니라 조직 간 의사 소통 문제를 완화시킵니다.

이 표준에서는 "기본"변형을 구분 기호 사용을 최소화하는 것으로 정의합니다. 그래서 YYYYMMDD는 IS 기본 확장 형식으로 대체가 YYYY-MM-DD.


4
ISO 8601에서 YYYY-MM-DD 외에 YYYYMMDD도 허용한다는 것을 몰랐습니다.
keuleJ

iso.org/iso-8601-date-and-time-format.html 은 YYYY-MM-DD의 "확장 형식"이 8601의 유일한 형식이라는 것을 나타내는 것 같습니다.
Oskar Austegard

3
@keuleJ YYYY-MM-DD 대신 YYYYMMDD와 같은 구분 기호 사용을 최소화하는 것을 ISO 8601 표준에서 "기본"형식 변형이라고합니다.
Basil Bourque

ISO 8601의 두 가지 이점 : (a) SPACE 문자가없고 현지화 된 텍스트가없는 컴퓨터로 파싱하기 쉬움 (b) 문화가 여러 해에 걸쳐 사람들이 쉽게 알아볼 수있는 해 영어를 가정하지 않고.
Basil Bourque

55

다른 모든 방법은 모호하기 때문입니다.

2003 년 1 월 2 일은 무슨 뜻입니까? 2003 년 1 월 2 일? 또는 유럽 : 2003 년 2 월 1 일? 01/02/03과 같이 연도에 두 자리 숫자를 사용하면 더욱 악화됩니다.

YYYYMMDD를 사용하는 이유는 날짜가 항상 분명한 20030201 날짜를 명확하게 전달할 수 있도록하는 규칙입니다. (더 쉽게 정렬 할 수 있습니다)

(이제 정수 2 천만 3 만 2 백 1과 1로 저장하지 마십시오.


14
"20030201 날짜는 항상 명확합니다" : 그것은 사실이 아닙니다. YYYYMMDD (또는 YYYYDDMM 또는 DDMMYYYY? ...)가 사용되고있는 형식이라는 것을 알지 않는 한 "2003 년 1 월 2 일"과 같이 모호합니다. 항상 날짜 형식을 알아야합니다. 모호하지 않은 "컨벤션"이 없습니다.
skomisa

6
@skomisa는 매우 잘못되었습니다. ISO 8601은 명시한 이유로 국제 표준 날짜 형식을 정의했습니다. 다른 형식은 유효한 날짜 형식이 아니며 19880605
K. Alan Bates

11
@ K.AlanBates ISO 8601에 따라 구문 분석해야한다고 가정하지 않으면 날짜가 모호합니다.
Goyo

16
20030201은 201AD 3 월 20 일입니까?
David Richerby

10
@Martijn이지만 언어별로 다릅니다. 터키에서는 2 월이 아닌 Şubat입니다 (코드가 작동한다고 생각하기 전에 항상 터키를 확인하십시오 ).
NH.

19

t1과 t2는 YYYYMMDD 형식으로 쓴 두 번을 나타내는 고유 한 정수로 둡니다. 그러면 t1 <t2는 t1 이후에 t2가 발생했음을 의미합니다.

DD 및 MM 첫 번째 형식으로이 순서를 잃습니다.

ISO는 유일한 합리적인 형식 인 IMO입니다.


1
이것을 정수로 저장하지 않는 것을 제외하고는 적어도 본 적이 없거나 고려하지 않았습니다.
파이프

5
@pipe : 일부 사람들은 믿습니다. YYYYMMDD를 정수로 저장하는 레거시 시스템을 유지합니다. 디자인은 명시적인 날짜 유형이없는 일부 오래된 데이터베이스 시스템에서 시작되었으며 이전 버전과의 호환성을 위해 유지되었습니다. 예쁘지 않아요. 하지마
Heinzi

19
@pipe 합리적인 사람은 "그러나 당신이 X을하지 않을 것"말하고 싶은 것이다 때마다 항상 적어도 하나의 반례가 있다는 것을 소프트웨어 업계 내 경험이었다
조셉 로저스

5
@pipe 데이터웨어 하우징에서 날짜 테이블의 기본 / 대리 키로 yyyymmdd 정수를 사용하는 것은 드문 일이 아닙니다.
soapygopher

4
@pipe, DNS 영역의 시퀀스 번호는 32 비트 정수이며, 영역이 변경 될 때 증가해야합니다. 그것은 평범한 숫자 일 수 있지만 일반적인 관용구는 2018092601과 같은 숫자를 사용하는 것입니다. 그러면 POSIX.1-2008의 기능이 지원되는 것을 의미하는 feature_test_macros(7)것과 같이 마법 번호에 대한 흥미로운 정의 _POSIX_C_SOURCE > 200809L가 있습니다 ...
ilkkachu

12

언급되지 않은 한 가지 점은 대화식 입력에서이 형식을 사용하여 입력을 제어 할 수 있다는 것입니다.

특정 연도 및 월을 모르면 월에 28, 29, 30 또는 31 일이 있는지 시스템에서 알 수 없습니다. 해당 연도 및 월의 대화식 입력이 먼저 시작되면 날짜 (마지막으로 삽입 된)가 허용 된 범위에 있는지 확인할 수 있습니다.

물론, 질문은 주로 날짜 형식에 관한 것이지만 날짜 형식은 사용자에게 제시된 형식을 따른다고 주장 할 수 있습니다.


7

YYYYMMDD 주문은 번호를 주문하는 것과 같은 방식으로 날짜가 가장 중요합니다. MMDDYYYY는 "이백 이십 삼"을 "이십 이백삼"으로 쓰는 것과 같습니다.

우리 문화에서는 MMDDYYYY에 대해 자연스럽게 이해합니다. 인간으로서 우리는 시간에 대한 인식을 가지고 있으며 수년은 느리게 발전하기 때문입니다. 우리는 일반적으로 몇 년인지 알고 있습니다. 연도를 보는 것은 거의 중요하지 않으므로 우리는 그것을 뒤로 밀어 넣습니다. 달은 그 중요성을 유지하기에 충분히 빠르게 변화합니다. 다른 문화권에서는 이것을 다르게 취급합니다. 세계의 많은 사람들이 DDMMYYYY를 선호합니다.


62
내 문화에서는 DDMMYYYY이기 때문에 "우리의 문화"를 다시 말하고 싶을 수도 있습니다. "우리의"문화가 아니기 때문입니다.
slebetman

66
MMDDYYYY 날짜 형식을 사용하는 모든 국가의 종합지도 img-9gag-fun.9cache.com/photo/a2mXmGd_700b.jpg
Peregrine

9
이상한 주장처럼 보인다 : "월은 그들의 중요성을 유지하기에 충분히 빨리 변한다"-> 그렇다면 왜 그날이 더 빨리 변하기 때문에 첫날을 보내지 않겠습니까?
Wim Deblauwe

7
@JoelCoehoorn, 쉽게 표현할 수 있습니다 ( "미국 문화"). "우리"/ "우리"는 종종 "스택 교환 커뮤니티"를 의미하는 데 사용됩니다.
AnoE

14
바로 그거죠. Stackoverflow는 국제적 입니다. 당신이 미국에 기반을 둔다고해서 다른 사람들도 마찬가지라고 말하거나 암시하거나 심지어 더 가능성을 만들지 않습니다. 여기서 독자의 지역성에 대해 어떤 가정도 할 수 없으며 전세계의 독자입니다. 그리고 대부분의 독자는 귀 하나 OP가 아니라 Google에서 귀하의 답변을 찾는 다른 사람들이 될 것입니다. 이 의견은 여러분이 살고있는 대륙과 다른 대륙에 쓰여 있습니다. 그리고 우리는 우리 자신의 흥미로운 습관을 가지고 있지만, 여기서는 MM / DD / YYYY를 사용하지 않을 것입니다 ...
cmaster

6

정렬은 언급되었지만 지금까지 가장 유용한 이유는 "문자열"로 비교하는 것입니다. 예, 26 자 타임 스탬프도 비슷하게 정렬됩니다.

이러한 비교가 정렬에 필수적이라는 것을 알고 있지만 일반적으로 2 요소 정렬에 유용합니다.

나는 이것이 채택되지 않은 프로젝트에서 일했으며, 프로그래머는 날짜를 문자열로 비교하려고 시도했습니다 (결과가 혼합되어 있음).

예쁜 형식은 클라이언트 쪽 또는 조판 용입니다.


5

이 형식은 문자열의 알파벳 순서를 날짜의 시간 순서와 동일하게 만듭니다. 이것은 많은 도구들이 예를 들어 파일을 알파벳 순으로 이름순으로 제공하지만 파일 형식에서 임의의 형식으로 된 날짜를 구문 분석하고 그것들을 기준으로 정렬 할 방법이 없기 때문에 유용합니다.


4

제한에 관한 것입니다. YYYYMMDD 형식의 YEAR, MONTH 및 DAY를 매개 변수로 생각하면 각 매개 변수는 이전 매개 변수보다 더 제한적입니다.

따라서 1970 년에 발생한 것을 검색하려면으로 시작하는 문자열을 검색하여 수행 할 수 "1970*"있지만 어느 달을 기억했는지와 같이 월을 추가 할 수 있습니다 "197005*". 이렇게하면 날짜의 모든 "매개 변수"가보다 구체적인 정보를 제공합니다.

덜 구체적인 정보 ( "1970*")에서 더 구체적인 정보 ( "19700523") 로가는 유일한 방법 입니다.


3
실제로 큰 논쟁은 아닙니다. 특정 연도가 아닌 특정 달에 일어나는 일을 검색하는 것이 일반적입니다.
큐빅

1
경우 1970*197005*"글로브"와일드 카드 구문을 나타냅니다, 당신은 글로브를 검색하여 MMDDYYYY 날짜의 무리를 검색 할 수 있습니다 *1970또는 05*1970. 귀하의 답변은 명시 적으로 언급하지 않은 추가 제약을 가정하고 암시 적으로 가정을 설명함으로써 향상 될 수 있습니다.
Quuxplusone

3
이것은 일종의 부작용이거나 다른 답변에서 언급 한 정렬 키 순서를 설명하는 또 다른 방법입니다. 그러나이 설명은 접두사 검색으로 제한하지 않는 한 분리됩니다. (인덱싱하기는 쉽지만 꼭 필요한 것은 아닙니다).
Peter Cordes

또한 비교적 간단한 정규 표현식으로 날짜 순서를 선택할 수 있음을 의미합니다.
Harper

1

프로그래밍에서 기본 날짜 형식이 YYYYMMDD ... 인 이유

입력 및 출력을 위해 사람이 읽을 수있는 형식이므로 반드시 저장하지 않아도됩니다.

모든 프로그래밍 언어 의 3 분1 이상이 영어를 기본 언어로 사용하는 국가에서 개발되었으며 대부분의 현대 언어는 일부 표준 설명을 준수합니다 . 날짜에 대한 국제 표준은 ISO 8601 입니다.

더 많은 정보 : (TMI?)

일반적으로 앞으로 시간이 변경로서, 일 다음 달, 마지막 년, 최초의 증가 - 우리가이 있다면 이해하기 쉬울 수 있습니다 진수 날짜 (그리고 소수 시간을 시간이 번호가 커짐에 통과 -). 사람이 숫자를보고 한눈에 다른 날짜와 비교하는 것이 더 쉽습니다.

컴퓨터가없는 신경 사용할 및 (그러나 대부분의 어떤 구조 모든 ) 컴퓨터 이진 논리가 기본 - 사용되는 전자는 실제로이 가장 낮은 기수 경제를 하지만, 가장없는 효율적인 A의도 쉬운 완료 순서 .

실제 입력과 출력 날짜 형식은 국가에 따라 다릅니다 에 의해 설정되어 현지화 YYYYMMDD 가장 이해하고에 당신이 사용하는 어떤 것으로 보일 수도 있지만, 보편적없는 오늘날 도 그런 식이었다 에 대한 과거 가장 긴 시간이지만 오늘날에도 로마 숫자일반적으로 날짜에 사용됩니다 .

연도를 미리 알면 1 년이 지날 수 있는 기간 의 가장 큰 변화 인 1 년의 일수를 알려줍니다 . 매달 입력해야 할 일 수 (입장 중 오류 점검)를 미리 알려주며, 다음 해가 입력 내용 과 일치하지 않는 경우 첫 날 입력을 허용하면 백업이 필요할 수 있습니다. . 또한 달력 형식 과 관련하여 중요 합니다 . 소수점 이하 날짜가 있는 괴짜 달력을 참조하십시오 .

컴퓨터에 관한 한, 1970 년 1 월 1 일 목요일 00:00:00 협정 세계시 (UTC) 이후 경과 된 시간 (초) 인 UNIX Epoch time 을 사용할 가능성이 높습니다. 정확히 86400 초 율리우스의 날 참조 . YYYYMMDD 형식은 자아 중심적 인간에 의해 선호되는 것으로 , IAU는 달리 명시되지 않는 한 연도 를 365.25 일 (31.5576 백만 초) 의 율리안 년 으로 간주합니다.


1
실제로 내가 만난 거의 모든 인간과 소프트웨어는 다른 형식을 선호합니다.
Goyo

1
만나서 반갑습니다! 저는 Dave이며 YYYYMMDD를 선호합니다
리버스 엔지니어

0

이 표현에 대해 본 또 다른 용도는 날짜 당 4 바이트 만 사용하여 날짜를 정수 (예 : 데이터베이스)로 저장할 수 있다는 것입니다. YYYYMMDD를 사용하면 정수 비교 (종종 단일 기계 명령어)가 표시된 날짜의 비교와 동일한 결과를 갖습니다. 그리고 그것은 사람이 읽을 수있게 적당히 인쇄합니다. 그리고이 중 어느 것도 주류 프로그래밍 환경에서 코드 나 특별한 지원이 전혀 필요하지 않습니다.

이러한 것들이 날짜와 관련하여 필요한 일을 많이하고 많은 일을 해야하는 경우이 형식은 많은 호소력이 있습니다.

이에 비해 DD / MM / YYYY와 같은 일반적인 형식의 날짜는 10 바이트를 ASCII 문자 문자열로 사용합니다. YYYYMMDD 문자열은이를 8로 줄이고 "표현을 비교하면 날짜를 비교하는 것과 동일한 결과"이점을 얻을 수 있지만 문자열 기반 비교는 단일 정수 비교가 아니라 문자 별 비교입니다.


2
날짜를 3 바이트로 묶는 것은 쉽지 않습니다. 0000 ~ 9999 범위는 총 23 비트에 14 비트, 01 ~ 12에는 4 비트, 01 ~ 31에는 5 비트가 필요합니다. 3 바이트 수량의 나머지 비트도 사용하면 하루 해상도를 유지하면서 32,768 년 동안 날짜를 나타낼 수 있습니다. 예를 들어, BC 8191 BC에서 24576 AD 범위의 날짜를 나타내는 데 사용할 수 있습니다. 비트를 yyyyyyyyyyyyyyymmmmddddd로 압축하면 소수 표현이 직접 비교 가능합니다 (직접 사람이 읽을 수는 없지만 누가 데이터베이스 물리적 스토리지를 관리합니까?).
CVn

0

달이 녹색 치즈로 만들어진 것과 같은 이유는 아닙니다. 대부분의 경우 기본 형식은 현지화 된 문자열입니다. 때때로 ISO 형식이 사용되지만 가독성을 높이기 위해 일반적으로 대시가 있습니다. YYYYMMDD(또는 %Y%m%d에서 strftime용어) 거의 기본값입니다. 공정하게 말해서 나는 그것을 보았지만 지금은 예를 생각할 수 없습니다.

유닉스 날짜 (GNU 핵심 유틸리티)

date

산출:

Wed Sep 26 22:20:57 CEST 2018

파이썬

import time
print(time.ctime())

산출:

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);
}

산출:

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);
}

산출:

Wed Sep 26 22:51:22 2018

자바 스크립트

current_date = new Date ( );
current_date;

산출:

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

SQLite

SELECT date('now');

산출:

2018-09-26

LibreOffice Calc

여기에 이미지 설명을 입력하십시오

누메

여기에 이미지 설명을 입력하십시오

사무실 만

여기에 이미지 설명을 입력하십시오

파이썬 + numpy

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

산출:

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

파이썬 + 팬더

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

산출:

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

소프트웨어 공학

여기에 이미지 설명을 입력하십시오

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

컵 /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
당신의 주장에 추가하기 위해, 스크립을 실행 한 컴퓨터의 사용자 설정으로 인해 얼마나 많은 형식이 형식화되어 있습니까?
Topher Brink

첫 번째는 실제로 "bash"가 아니며, 날짜 프로그램입니다 ( Do 27. Sep 22:27:09 CEST 2018여기서 출력 됩니다)
Paŭlo Ebermann

@ PaŭloEbermann 당신 말이 맞아요, 지금 더 나아지기를 바랍니다. 내가 말했듯이 이러한 형식 중 다수는 현지화되어 있으므로 실제 표시되는 형식은 현지화 옵션에 따라 다릅니다.
Goyo

3
이 답변의 요점은 최종 사용자 지향 응용 프로그램에는 적용되지만 시스템 간의 데이터 교환, 데이터 직렬화, 메시지 / 데이터 프로토콜, 로깅, 추적, 디버거 등은 그렇지 않습니다. ISO 8601 표준은 시스템 관리자 및 프로그래머를 대상으로하는 이러한 용도의 표준이되고 있습니다. 국제 또는 로케일에 구애받지 않는 시나리오에 적합합니다.
Basil Bourque

@BasilBourque 감사합니다. 내 시스템에서 찾은 임의의 로그 샘플을 추가했습니다. 편리한 다른 유형의 예는 없습니다. 그러나 특정 도메인에서 ISO 8601로 기본 설정하는 경향이 다른 형식으로 기본 설정되는 방대한 양의 소프트웨어에 직면하여 기본 프로그래밍 방식이 "프로그래밍의 기본 설정"이라고 생각하지 않습니다.
Goyo

-1

지금까지 언급되지 않은 추가 이점은 바람직한 양자화 (정확한 값을 동일한 일반 범위의 값에 할당)가 비교적 쉽고 빠른 단일 동작이라는 점입니다.

오늘 총계 및 판매 수와 같은 이벤트를 요약 한 보고서를 작성한다고 가정하십시오. 판매 날짜 및 시간은 YYYYMMDDHHMISS로 저장되므로 날짜 시간을 판매 일로 줄이려면 가장 왼쪽에있는 8 자 (문자열 인 경우) 또는 정수 나누기 (즉, 바닥)를 1,000,000으로 유지하면됩니다.

마찬가지로, 월 판매를 원하면 가장 왼쪽에있는 6 자리 만 유지하거나 100,000,000으로 나눕니다.

물론 모든 문자열 조작이 가능하다고 주장 할 수 있습니다. "12-25-2018 12:34 pm"의 판매 시간은 한 달과 연도를 얻기 위해 하위 문자열로 여러 번 조작하고 조작 할 수 있습니다. 숫자 형식으로 122520181234를 나누고 수정하고 곱하고 더 나누고 결국 한 달과 1 년을 생산할 수도 있습니다. 그러나 코드는 실제로 작성, 읽기, 유지 관리 및 이해하기가 어려울 것입니다.

날짜 형식이 MM / DD / YYYY이지만 잘라내어 다시 조각화하면 정교한 데이터베이스 최적화 프로그램조차도 where 절의 열에서 인덱스를 사용하지 못할 수 있습니다. 이에 비해 YYYYMMDD 표현을 저장하고 2018 년 12 월을 원하면 ilk의 where 절 dateasstring LIKE '201812%'또는 dateasint BETWEEN 20181200 and 20181299색인을 쉽게 사용할 수있는 항목으로 연결됩니다.

따라서 날짜에 대한 전용 데이터 유형이없고 문자열 / 숫자 표시가 유일한 선택 인 경우, 가장 긴 간격에서 왼쪽에서 가장 짧은 간격으로의 일부 표현에서 시간을 사용하고 저장하는 것이 유일한 선택이었습니다. right는 이해, 조작, 저장, 검색 및 코드 유지 관리의 용이성에 대한 몇 가지 이점이 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.